2013-06-06 9 views
5

私はiOS開発の新人です。これは、両方のケースでCallMeメソッドを呼び出しているaddTarget:自己対addTarget:なし

[button addTarget:self action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 

[button addTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 

:我々は次のようにボタンにターゲットを割り当てるprogrammatically.When私はボタンを追加していたとき、私は少し混乱しています。誰も私にこれら2つのコード行の実際の違いが何であるかを説明することができます。誰でもaddTargetの作業を特別に説明できればより役に立ちます。ありがとうございます。ヘルプは充当されるでしょう。 Appleのdocumentationによる

+2

@ H2CO3が間違っています。 nilターゲットを追加するとレスポンダチェーンに沿ってアクションメッセージが送信されます。 – Sven

+0

@ H2CO3はい、今はメソッドを呼んでいない、私は前回私のコードを構築していなかったと思う、ばかな間違い。しかし、私はなぜ私たちがターゲットを追加する "自己"を伝えることができますか?私は混乱しています。あなたはこのことから私を助けてください。 –

+0

@ Sven間違っている、確かに、それを忘れてしまった。私は訂正した。 –

答えて

6

あなたが自己や他のオブジェクトなどを追加した場合アクションメッセージのターゲット。メッセージはこのオブジェクトに正確に送信されます。

ターゲットとしてnilを追加すると、メッセージがトリガーされたときに実行時に実際のターゲットが検索されます。ルックアップは、最初のレスポンダオブジェクトから開始し、そこからレスポンダチェーンに沿って連続します。つまり、nextResponderメソッドによって返されたオブジェクトがこのメソッドを実装するオブジェクトが見つかるまで試行します。正確な検索順序の詳細については、event handling guideをご覧ください。

ターゲット ターゲットオブジェクト-、アクションメッセージが送信されているオブジェクトである:ここでは

+2

親オブジェクト(子オブジェクト)に親オブジェクト(親オブジェクト)を送信するために親(呼び出し側)が対処方法を処理するように、nilに設定することをお勧めしますか? – user523234

1

ターゲットオブジェクトは、パラメータがaddTarget方法-、アクションメッセージが送信されているオブジェクトであるに送信されます。これがnilの場合、レスポンダーチェーンはアクションメッセージに応答するオブジェクトを検索します。

アクションを削除したい場合は、アクションと削除対象の方法で指定されたコントロールイベントとペアになって、すべてのターゲットを削除するためにnilを渡すことができ、

[button removeTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 
1

はUicontrolのクラスのためのAppleのドキュメントからパラメータターゲットの説明です。これがnilの場合、レスポンダーチェーンはアクションメッセージに応答するオブジェクトを検索します。

関連する問題