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

is there a way to automatically set UITextfield delegate from interface builder?

在界面生成器中将 UITextfield 添加到控制器时,有什么方法可以让文本字段的委托 属性 自动设置为放置 UITextfield 的控制器?

Select TextField,按住 Control 键并拖动线到 ViewController,释放并 select 委托。

有自动设置的方法:

覆盖文本字段的 awakeFromNib 方法,获取它 viewController,检查协议一致性并将文本字段委托设置为此 vc。

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

这是 UIView 的扩展,用于通过响应链查找父 viewController:

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