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:メソッドが実装されている)のメソッドを呼び出します。

つまり、テキストフィールドをタップして編集を開始すると、textFieldには「ああ、今編集中です!」と表示されます。を内部的に呼び出します[self.delegate textFieldDidBeginEditing:self]。ここで、デリゲートは、デリゲートとして設定したインスタンスです(通常はUIViewControllerサブクラス)。

于 2012-06-18T22:33:51.827 に答える