2017-02-23 6 views
0

私はそれぞれにテキストフィールドを持つカスタムセルを持っています。私はそれらのテキストを変更するとき、私は現在の行を取得し、私の配列を正しく更新したいと思います。これまでのところ、私はdidFinishEditingをまったく実行させることさえできなかったと思います。私はそこに簡単な印刷コマンドを入れました。そして、私がtextFieldsを変更したとき、何も印刷されませんでした。私は、関数を置く場所、セルのクラス、またはメインクラスのどこにいるのか分かりません。メインクラスでは実行されず、セルクラスではインデックスパスを与えることはできません。ここで didFinishEditing(textField)をカスタムセルで使用する方法は?

は、私が試したものです。また、

func textFieldDidEndEditing(_ itemTitle: UITextField) { 
    let pointInTable = itemTitle.convert(itemTitle.bounds.origin, to: self.tableView) 

    let textFieldIndexPath = self.tableView.indexPathForRow(at: pointInTable) 


    items.insert(itemTitle.text!, at: textFieldIndexPath) 

    //tableView.reloadData()(This isn't really that important) 
} 

そして、この:

class ItemTableViewCell: UITableViewCell { 

    @IBOutlet weak var itemTitle: UITextField! 
    @IBOutlet weak var date: UILabel! 


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     itemTitle.resignFirstResponder() 
    }//(Not relevant) 

}

func textFieldDidEndEditing(_ itemTitle: UITextField) { 

    items.insert(itemTitle.text!, at: indexPath.row) 

    //tableView.reloadData()(This isn't really that important) 

}

はここに私のセルクラスです私はちょうどので、私はカスタムセルを拾っ

Screenshot link

class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 

そして、私のビューがレイアウトされているかのスクリーンショット:私は次のようました私のメインクラスで

学び始めた。私は前にtableviewsだけでなく、.defaultと.subtitleセルを使用しました。

ありがとうございました!

+0

私はあなたが追加することを忘れ考えるtextfield.delegate =「完了」キーボードが押されたら、自己 – Ram

+0

ザ・が終了編集が呼び出されなかった(と:デリゲートの機能では、(セル用)indexPathでindexPathにアクセスすることができますデリゲートも設定する必要があります)。値の変更のためにターゲットを追加する必要があります。インターフェースビルダーからドラッグしてアクションを選択することができます。 (またはそれが "変更された編集"されている可能性があります) –

答えて

0

UITextFieldDelegateがTableViewCellになければならないため、何も表示されません。次に、delegateを使用して、textFieldで使用しているセルとテキストをviewControllerに渡すことができます。 tableViewとあなたはindexPathです。あなたのデリゲートを作成し、クラスがあなたからカスタムデリゲートを拡張し、あなたのcustomCell

protocol ItemTableViewCellDelegate: NSObjectProtocol { 
    func textFieldDidEndEditing(text: String, cell: ItemTableViewCell) 
} 


class ItemTableViewCell: UITableViewCell, UITextFieldDelegate { 

    @IBOutlet weak var itemTitle: UITextField! 
    @IBOutlet weak var date: UILabel! 

    var delegate: ItemTableViewCellDelegate? 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     itemTitle.resignFirstResponder() 
    } 

    override func awakeFromNib() { 
     itemTitle.delegate = self 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     if let text = textField.text { 
      delegate?.textFieldDidEndEditing(text: text, cell: self) 
     } 
    } 
} 

し、それらにテキストフィールドのデリゲートを置くここ

はこのような何かを試してみてください。

class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, ItemTableViewCellDelegate { 

    func textFieldDidEndEditing(text: String, cell: ItemTableViewCell) { 
     if let indexPath = tableView.indexPath(for: cell) { 
      items.insert(text, at: textFieldIndexPath) 
     } 
    } 
} 
+0

私はこれを解決するために何をしたのか分かりませんが、これらの行に沿った何かでした、ありがとう! – Tuomax

+0

こんにちはToumaxあなたが何が起こったのかを理解するのを助けたいと思ったら私に知らせてください。 –

関連する問題