我所做的是创建一个自定义单元格,并将我需要的任何自定义 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() }
}