问题描述
在界面生成器中向控制器添加 UITextfield 时,有没有办法让文本字段的委托属性自动设置为放置 UITextfield 的控制器?
解决方法
选择 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()
}
}