代码之家  ›  专栏  ›  技术社区  ›  Jules

如何从textfieldAddending访问自定义的uiTableViewCell?

  •  0
  • Jules  · 技术社区  · 6 年前

    我有一个习俗 UITableViewCell 我添加了一个 UITextField ,我想对textfield执行一些验证并设置 hasError 属性,以便向单元格添加错误标签并将文本字段更改回颜色。

    我没有使用故事板和创建自定义单元格/ UITababVIEW单元格 编程。

    我在用 textFieldDidEndEditing 在我的 UIViewController 检测文本更改并且无法访问单元格,设置 哈斯误差 财产。

    我想我可以通过一个标记来循环视图/textfield,以字段textfield,然后获得它的父级。

    或者我应该实现我自己的版本 文本字段结束编辑 然后触发另一个事件,该事件以单元格和文本字段作为参数。

    但我不确定这是否是最好的方法,也不知道如何启动事件。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Glenn Posadas    6 年前

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

    一个简单的例子:

    大梁

    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) {
    
        }
    
    }