有没有办法从界面构建器自动设置 UITextfield 委托?

问题描述

在界面生成器中向控制器添加 UITextfield 时,有没有办法让文本字段的委托属性自动设置为放置 UITextfield 的控制器?

解决方法

enter image description here

选择 TextField,按住 Control 键并将线条拖到 ViewController 上,松开并选择委托。

,

有自动设置的方法:

覆盖 textfield 的 awakeFromNib 方法,获取它的 viewController,检查协议符合性并将 textField 委托设置给这个 vc。

extension UITextField {
    open override func awakeFromNib() {
        if let vc = self.getViewController() as? UITextFieldDelegate {
            self.delegate = vc
        }
    }
}

这是通过响应者链查找父视图控制器的 UIView 扩展:

extension UIView {
    func getViewController() -> UIViewController? {
        return (self.next as? UIViewController) ?? (self.next as? UIView)?.getViewController()
    }
}