我对快速编程和面向对象编程很陌生,我正在尝试理解使用UIKit时的委托模式。我想我理解了放弃某些类责任的概念:类UITextField有一个(例如)UITextField实例,它在ViewController中实现了一些逻辑。
class ViewController: UIViewController {
let textField = UITextField(frame: CGRect(...))
override func viewDidLoad() {
textField.contentVerticalAlignment = .center
textField.borderStyle = .roundedRect
textField.placeholder = "Help me to figure it out"
textField.delegate = self // set the controller as a delegate
self.view.addSubview(textField)
}
}还有一个ViewController的扩展,它实现了UITextFieldDelegate协议的方法:
extension ViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
... // other methods
}在阅读教程时,我有这样的想法:必须在UIKit中实现类似于此的逻辑:
let allowEditing = delegate?.textFieldShouldBeginEditing() ?? true但是我找不到这行代码所在的位置。我理解得对吗?这段代码在哪里?我搜索了文档和类实现,但没有找到它。
发布于 2019-09-01 07:06:51
你说得对!
您正在寻找的代码在UIKit的私有部分中,您看不到它。所有实现都是私有的。
请注意,此方法是一个objective可选方法,因此将像这样调用它(如果它是Swift代码):
guard delegation?.textFieldShouldBeginEditing?() ?? true else { return }
becomeFirstResponder()看到?之前的()了吗?
请注意,UIKit是用objective编写的,如果您想深入研究这两种语言,您应该考虑它们之间的差异。
https://stackoverflow.com/questions/57743866
复制相似问题