如何从 textFieldDidEndEditing 访问自定义 UITableViewCell?
How do I gain access to a custom UITableViewCell from textFieldDidEndEditing?
我有一个自定义 UITableViewCell
,我在其中添加了一个 UITextField
,我想对文本字段执行一些验证并设置一个 hasError
属性在单元格上可能会向单元格添加错误标签并更改文本字段的背景颜色。
我没有使用故事板并以编程方式创建我的自定义单元格/UITableViewCell
。
我在我的 UIViewController
中使用 textFieldDidEndEditing
来检测文本更改并且无法访问该单元格,以设置我的 hasError
属性.
我想我可以通过标签循环视图/文本字段以填充文本字段然后获得它的父级。
或者也许我应该实现我自己的 textFieldDidEndEditing
版本,然后触发另一个事件,该事件将单元格和文本字段作为参数。
但我不确定这是否是最佳方法或如何触发事件。
您可以使用 Protocol
。 https://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) {
}
}
我有一个自定义 UITableViewCell
,我在其中添加了一个 UITextField
,我想对文本字段执行一些验证并设置一个 hasError
属性在单元格上可能会向单元格添加错误标签并更改文本字段的背景颜色。
我没有使用故事板并以编程方式创建我的自定义单元格/UITableViewCell
。
我在我的 UIViewController
中使用 textFieldDidEndEditing
来检测文本更改并且无法访问该单元格,以设置我的 hasError
属性.
我想我可以通过标签循环视图/文本字段以填充文本字段然后获得它的父级。
或者也许我应该实现我自己的 textFieldDidEndEditing
版本,然后触发另一个事件,该事件将单元格和文本字段作为参数。
但我不确定这是否是最佳方法或如何触发事件。
您可以使用 Protocol
。 https://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) {
}
}