3

我只是想知道委托方法究竟是如何知道何时调用的?例如,在UITextFieldDelegate协议中,textFieldDidBeginEditing:当在文本字段中开始编辑时调用该方法(前提是我实现了此方法)。

那么代码究竟是如何检测何时调用的textFieldDidBeginEditing:呢?系统是否只检查是否textFieldDidBeginEditing:已经实现以及是否运行该方法?引擎盖下有什么我没有看到的吗?

4

2 回答 2

3

确切地。

我不能保证 Apple 的框架代码是如何在底层实现的,但一个非常普遍的说法是:

if ([[self delegate] respondsToSelector:@selector(someInstance:didDoSomethingWith:)]) {
    [[self delegate] someInstance:self didDoSomethingWith:foo];
}

这允许您拥有可选的委托方法,这似乎是您的问题。

于 2012-06-18T22:37:19.183 回答
0

该代码不会“检测何时调用”委托方法。textField 接收一个事件,并调用它的委托上的方法(实现了 textFieldDidBeginEditing: 方法)。

简而言之,当您点击文本字段开始编辑时,文本字段会显示哦,我正在编辑!” 并在内部调用[self.delegate textFieldDidBeginEditing:self],其中委托是您设置为委托的实例(通常是 UIViewController 子类)

于 2012-06-18T22:33:51.827 回答