私がしているのは、カスタム セルを作成し、必要なカスタム UI 要素を内部に配置indexPath
し、セルがデキューされたときに設定されるプロパティを作成することです。次に、indexPath を のカスタム要素に渡しdidSet
ます。
class EditableTableViewCell: UITableViewCell {
@IBOutlet weak var textField: TableViewTextField!
var indexPath: IndexPath? {
didSet {
//pass it along to the custom textField
textField.indexPath = indexPath
}
}
}
class TableViewTextField: UITextField {
var indexPath: IndexPath?
}
でTableView
:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "EditableCell") as! EditableTableViewCell
cell.indexPath = indexPath
return cell
}
次に、UITextFieldDelegate
プロトコルを実装します。textField には indexPath があるため、どこから来たかを常に知ることができます。デリゲートを設定するのに最適な場所がどこにあるかわかりません。最も簡単なのは、セルがデキューされたときに設定することです。
override func textFieldDidEndEditing(_ textField: UITextField) {
guard let myTextField = textField as? TableViewTextField else { fatalError() }
guard let indexPath = myTextField.indexPath else { fatalError() }
}