如何从 textFieldDidEndEditing 访问自定义 UITableViewCell?

How do I gain access to a custom UITableViewCell from textFieldDidEndEditing?

我有一个自定义 UITableViewCell,我在其中添加了一个 UITextField,我想对文本字段执行一些验证并设置一个 hasError 属性在单元格上可能会向单元格添加错误标签并更改文本字段的背景颜色。

我没有使用故事板并以编程方式创建我的自定义单元格/UITableViewCell

我在我的 UIViewController 中使用 textFieldDidEndEditing 来检测文本更改并且无法访问该单元格,以设置我的 hasError 属性.

我想我可以通过标签循环视图/文本字段以填充文本字段然后获得它的父级。

或者也许我应该实现我自己的 textFieldDidEndEditing 版本,然后触发另一个事件,该事件将单元格和文本字段作为参数。

但我不确定这是否是最佳方法或如何触发事件。

您可以使用 Protocolhttps://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/Protocol.html

一个简单的例子:

cellForRow

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = ....
    cell.delegate = self
    return cell
}

您的 UITableViewCell 子类:

class Cell: UITableViewCell, UITextFieldDelegate {

    // MARK: - Properties

    weak var delegate: CellDelegate?
    ....

    // MARK: - Functions

    func textFieldDidEndEditing(_ textField: UITextField) {
        self.delegate?.cell(self, textFieldDidEndDiting: textField)
    }
}

您的协议

protocol CellDelegate: class {
    func cell(_ cell: Cell, textFieldDidEndDiting textField: UITextField)
}

最后,让您的控制器符合该协议,如下所示:

class ViewController: UIViewController, CellDelegate {

    func cell(_ cell: Cell, textFieldDidEndDiting textField: UITextField) {

    }

}