我所做的是創建一個自定義單元格,並將我需要的任何自定義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
協議,因爲文本字段有其indexPath你將永遠知道它是從哪裏來的。 不知道設置委託的最佳位置在哪裏。最簡單的方法是在單元出列時設置它。
override func textFieldDidEndEditing(_ textField: UITextField) {
guard let myTextField = textField as? TableViewTextField else { fatalError() }
guard let indexPath = myTextField.indexPath else { fatalError() }
}
爲什麼要3次超級瀏覽? – giuseppe
tableviewCells層次結構發生了變化 因此,添加一個額外的.superview – Kalpesh
您能否指出我在此處解釋此更改的文檔?問候 – giuseppe