テーブルビューセルにテキストフィールドを設定して文字入力できるように、ウェブ上のサンプルコードを使用してアプリを作りましたが、セルの数を増やして(図1)のように順番に入力していくと(図2)のように、0番目のセルに入力した内容が、リユーズセルのテキストフィールドに表示されてしまいます。
また、そのまま続けて入力して行って(図3)のようにデータを上書きして、0番目のセルに戻ってみると(図4)のように0番目のセルのテキストフィールドデータも書き換わってしまします。
リユーズされるので当然といえば当然で、どのようなメソッドあるいはプロパティを追加すればリユーズセルのテキストフィールドに最初のデータを表示しないようにできるのか、リユーズセルのテキストフィールドデータを書き換えた場合、最初のテーブルセルのテキストフィールドデータが書き変わらないようにできるのか全く行き詰まってしまって分からない状況です。プログラムは以下のように記述しており、もしわかる方がおられればご享受いただければ幸いです。宜しくお願い致します。
<ViewController.swift>の記述
ViewController.swift
1import UIKit 2 3class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, InputTextTableCellDelegate { 4 5 @IBOutlet weak var tableView: UITableView! 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additional setup after loading the view, typically from a nib. 10 } 11 12 13 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 14 return 15 15 } 16 17 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 18 let cell: InputTextTableCell = 19 tableView.dequeueReusableCell(withIdentifier: "InputTextCell", for: indexPath as IndexPath) as! InputTextTableCell 20 cell.delegate = self 21 return cell 22 } 23 24 func textFieldDidEndEditing(cell: InputTextTableCell, Value: NSString) -> () { 25 } 26 27 override func didReceiveMemoryWarning() { 28 super.didReceiveMemoryWarning() 29 // Dispose of any resources that can be recreated. 30 } 31 32}
Protocol<InputTextTableCell.swift>の記述
InputTextTableCell.swift
1import UIKit 2 3protocol InputTextTableCellDelegate { 4 func textFieldDidEndEditing(cell:InputTextTableCell, Value:NSString) -> () 5} 6 7class InputTextTableCell: UITableViewCell, UITextFieldDelegate { 8 9 10 @IBOutlet weak var inputTextField: UITextField! 11 @IBOutlet weak var inputTextField2: UITextField! 12 13 var delegate: InputTextTableCellDelegate! = nil 14 15 override func awakeFromNib() { 16 super.awakeFromNib() 17 // Initialization code 18 inputTextField.delegate = self 19 inputTextField2.delegate = self 20 } 21 22 override func setSelected(_ selected: Bool, animated: Bool) { 23 super.setSelected(selected, animated: animated) 24 25 // Configure the view for the selected state 26 } 27 28 static func height() -> CGFloat { 29 return 75 30 } 31 32 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 33 if textField.tag == 1{ 34 inputTextField2.becomeFirstResponder() 35 }else{ 36 textField.resignFirstResponder() 37 } 38 return true 39 } 40 41 func textFieldDidEndEditing(_ textField: UITextField) { 42 self.delegate!.textFieldDidEndEditing(cell: self, Value: textField.text! as NSString) 43//AppDelegateの配列にデータを追加 44 let appDelegate = UIApplication.shared.delegate as! AppDelegate 45 if textField.tag % 2 != 0 { 46 appDelegate.dataArray1.append(textField.text!) 47 print("配列1 = \(appDelegate.dataArray1)") 48 }else{ 49 appDelegate.dataArray2.append(textField.text!) 50 print("配列2 = \(appDelegate.dataArray2)") 51 } 52 } 53}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/24 06:26
2016/11/24 06:31
2016/11/24 12:06