我只是想知道委托方法究竟是如何知道何时调用的?例如,在UITextFieldDelegate
协议中,textFieldDidBeginEditing:
当在文本字段中开始编辑时调用该方法(前提是我实现了此方法)。
那么代码究竟是如何检测何时调用的textFieldDidBeginEditing:
呢?系统是否只检查是否textFieldDidBeginEditing:
已经实现以及是否运行该方法?引擎盖下有什么我没有看到的吗?
我只是想知道委托方法究竟是如何知道何时调用的?例如,在UITextFieldDelegate
协议中,textFieldDidBeginEditing:
当在文本字段中开始编辑时调用该方法(前提是我实现了此方法)。
那么代码究竟是如何检测何时调用的textFieldDidBeginEditing:
呢?系统是否只检查是否textFieldDidBeginEditing:
已经实现以及是否运行该方法?引擎盖下有什么我没有看到的吗?
确切地。
我不能保证 Apple 的框架代码是如何在底层实现的,但一个非常普遍的说法是:
if ([[self delegate] respondsToSelector:@selector(someInstance:didDoSomethingWith:)]) {
[[self delegate] someInstance:self didDoSomethingWith:foo];
}
这允许您拥有可选的委托方法,这似乎是您的问题。
该代码不会“检测何时调用”委托方法。textField 接收一个事件,并调用它的委托上的方法(实现了 textFieldDidBeginEditing: 方法)。
简而言之,当您点击文本字段开始编辑时,文本字段会显示“哦,我正在编辑!” 并在内部调用[self.delegate textFieldDidBeginEditing:self]
,其中委托是您设置为委托的实例(通常是 UIViewController 子类)