2016-03-25 6 views
1

UITableViewCellには2つのUITextFieldインスタンスがあります。 CustomCellでUITextFieldのテキストを取得します。 その関数はtest()です。TableViewControllerのCustomCellでUITextFieldを取得するためのデリゲートトリガと通常トリガの違いは何ですか?

パターンAはUITextFieldの委任であり、 パターンBはプレスセル機能です。

パターンBは動作しましたが、パターンAは動作しませんでした。 私は実際には、仕事をしたい、 これは私の質問です なぜパターンA doesnt仕事?

そして、どうすればTableViewControllerからCustomCellでUITextFieldのテキストを取得できますか?

//Only needed code is written. 

protocol CustomTableViewCellDelegate{ 
    func getInputed(textField: UITextField) 
} 

class CustomTableViewCell: UITableViewCell , UITextFieldDelegate{ 
     override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
    if myTextField != nil { 

     myTextField.delegate = self 
     myTextField2.delegate = self 
    } 
} 

    //the session is to end 
    func textFieldShouldEndEditing(textField: UITextField) -> Bool { 
     if delegate != nil { 
      self.delegate?.getInputed(textField) 
     } 
     return true 
    } 


} 


class TableViewController: UITableViewController, CustomTableViewCellDelegate{ 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
//Im sure I write like this 
    cell.delegate = self 

} 
    //Pattern A 
    func getInputed(textField: UITextField){ 
     test() 
    } 

    //Pattern B 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     test() 

    } 


    func test(){ 
     self.myTableView.reloadData() 
     let cell = myTableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! CustomTableViewCell 
     print(cell.myTextField.text) 
     print(cell.myTextField.tag) 
     print(cell.myTextField2.text) 
     print(cell.myTextField2.tag) 

    } 

} 
+0

'textFieldShouldEndEditing'が呼び出されていることを確認しましたか?また、Cellの代理人として 'TableViewController'のオブジェクトを設定しましたか?もちろん、はい、 – san

+0

です。 textFieldShouldEndEditingが呼び出されます。オプション( "")のみが表示されます。 – YOSUKE

+0

'getInputed'は' Pattern A'で呼び出されますが、 'cell.myTextField.text'の値は' Optional( "") 'ですか? – san

答えて

1

コメント/チャットのディスカッションに基づいて、回答を追加しています。 次のようにコードを変更します。

protocol CustomTableViewCellDelegate{ 
    func getInputed(cell:CustomTableViewCell) 
} 

//the session is to end 
func textFieldDidEndEditing(cell:CustomTableViewCell) { 
    if delegate != nil { 
     self.delegate?.getInputed(self) 
    } 
} 

func test(cell:CustomTableViewCell) { 
    print(cell.myTextField.text) 
    print(cell.myTextField.tag) 
    print(cell.myTextField2.text) 
    print(cell.myTextField2.tag) 

    self.myTableView.reloadData() 
} 
+0

ありがとうございます!あなたはとても親切です。 – YOSUKE

+0

あなたは歓迎です:) – san

関連する問題