UITableViewCell内にTextFieldを配置し、
改行、もしくはタップしたタイミングで入力した値を取得したいです。
具体的には、カスタムのUITableViewCellクラスであるTextFieldEditCellクラスを定義し、そこにUILabelとUITextFieldを設置、さらにカスタムのDelegateとしてTextFieldEditCellDelegateをprotcolとして追加しました。
対象のViewControllerにUITableViewを設置し、そのセルに上記のクラスを設定。
TextFieldEditCellDelegateで定義したtextFieldDidEndEditingメソッドを呼び出して入力した値を取得します。
以下のソースコードでは、UserOptionTableViewController.swiftのtextFieldDidEndEditingメソッドが呼び出されず、入力した値が取得できていない状態です。
どうすれば、メソッドを呼び出すことができるのでしょうか?
ご教授お願いします。
TextFieldEditCell.swift
swift
1import UIKit 2 3protocol TextFieldEditCellDelegate: class { 4 func textFieldDidEndEditing(cell: TextFieldEditCell, value: NSString) 5} 6 7class TextFieldEditCell: UITableViewCell, UITextFieldDelegate { 8 9 @IBOutlet weak var titleLabel: UILabel! 10 @IBOutlet weak var textField: UITextField! 11 weak var delegate: TextFieldEditCellDelegate! = nil 12 13 override func awakeFromNib() { 14 super.awakeFromNib() 15 // Initialization code 16 } 17 18 override func setSelected(selected: Bool, animated: Bool) { 19 super.setSelected(selected, animated: animated) 20 21 // Configure the view for the selected state 22 } 23 24 func setCell(name: String, value: String?) { 25 titleLabel.text = name 26 textField.text = value 27 } 28 29 internal func textFieldShouldReturn(textField: UITextField) -> Bool { 30 textField.resignFirstResponder() 31 return true; 32 } 33 34 internal func textFieldDidEndEditing(textField: UITextField) { 35 self.delegate.textFieldDidEndEditing(self, value: textField.text!) 36 } 37} 38
UserOptionTableViewController.swift
swift
1class UserOptionViewController: UIViewController, UITableViewDelegate,UITableViewDataSource, TextFieldEditCellDelegate { 2 3 var optionEntity: OptionEntity = OptionEntity(); 4 var viewData: Array<OptionProperty> = [] 5 @IBOutlet weak var optionDataTableView: UITableView! 6 @IBAction func saveTransaction(sender: AnyObject) { 7 8 } 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 let transaction = PostDataTransaction() 14 transaction.selectOption("xxx@gmail.com") 15 16 let defaults = NSUserDefaults.standardUserDefaults() 17 if let data = defaults.objectForKey("optionData") { 18 let optionData: NSData = data as! NSData 19 do { 20 let optionDataObj: NSDictionary = try NSJSONSerialization.JSONObjectWithData(optionData, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary 21 22 optionEntity.setAccountName(optionDataObj["accountname"] as! String) 23 optionEntity.setPassword(optionDataObj["password"] as! String) 24 optionEntity.setSmtphost(optionDataObj["smtphost"] as! String) 25 optionEntity.setSmtpuser(optionDataObj["smtpuser"] as! String) 26 optionEntity.setSmtppassword(optionDataObj["smtppassword"] as! String) 27 optionEntity.setSmtpssl(optionDataObj["smtpssl"] as! String) 28 optionEntity.setSmtpauth(optionDataObj["smtpauth"] as! String) 29 optionEntity.setSmtpport(optionDataObj["smtpport"] as! String) 30 } catch { 31 // error 32 } 33 } 34 35 viewData = optionEntity.toArrayForView() 36 //let optionDataTableView = UITableView(frame: view.frame, style: .Grouped) 37 optionDataTableView.delegate = self 38 optionDataTableView.dataSource = self 39 //optionDataTableView.allowsSelectionDuringEditing = true 40 } 41 42 override func didReceiveMemoryWarning() { 43 super.didReceiveMemoryWarning() 44 // Dispose of any resources that can be recreated. 45 } 46 47 // MARK: - Table view data source 48 49 func numberOfSectionsInTableView(tableView: UITableView) -> Int { 50 // #warning Incomplete implementation, return the number of sections 51 return 2 52 } 53 54 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 55 // #warning Incomplete implementation, return the number of rows 56 if section == 0 { 57 return 2 58 } 59 return 5 60 } 61 62 // セクションのタイトル 63 func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 64 if(section == 0) { 65 return "アカウント情報" 66 } else { 67 return "SMTP情報" 68 } 69 } 70 71 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 72 let cell: TextFieldEditCell = tableView.dequeueReusableCellWithIdentifier("optionCell", forIndexPath: indexPath) as! TextFieldEditCell 73 cell.delegate = self 74 if indexPath.section == 0 { 75 cell.setCell(viewData[indexPath.row].key, value: viewData[indexPath.row].value) 76 } else { 77 cell.setCell(viewData[indexPath.row + 2].key, value: viewData[indexPath.row + 2].value) 78 } 79 return cell 80 } 81 82 // 入力が終わったタイミングで以下のメソッドが実行し、入力した値を取得したいが、実行されていない状態。 83 func textFieldDidEndEditing(cell: TextFieldEditCell, value: NSString){ 84 let path = optionDataTableView.indexPathForRowAtPoint(cell.convertPoint(cell.bounds.origin, toView: optionDataTableView)) 85 print("row=%d, value = %@", path!.row, value) 86 //NSLog("row=%d, value = %@", path!.row, value) 87 } 88
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/24 06:00