いくつかのIBAction
で私は見た:
- (IBAction)pushButton:(id)sender;
この (id)sender
いつ使用しますか?
(id)sender is the object which sent the message to that selector.
コード例:
- (IBAction)submitButton:(id)sender {
UIButton *button = (UIButton *)sender;
[button setEnabled:NO];
[button setTitle:@"foo" forState:UIControlStateDisabled];
}
Matt Gallowayは (id) sender
iPhone Dev SDKフォーラムのアクション:
(id)senderは、メッセージをそのセレクターに送信したオブジェクトです。コントロールを関数に渡すなど、デリゲート関数のようなものです。
そのセレクターを呼び出している2つのオブジェクトがあり、それらを区別したい場合に使用します。もちろん、2つの異なる関数を使用することもできますが、多くの場合、1つの関数を使用する方がコードが簡潔で重複しません。
詳細については、 IControl Class Reference を参照してください。
その例として、UITextFieldには、UITextFieldの編集が終了したときにトリガーするデリゲートがあります。
-(IBAction) editingEnded:(id) sender {
// the cast goes here, lets assume there's more than one UITextfield
// in this Owner and you want to know which one of them has triggered
// the "editingEnded" delegate
UITextField *textField= (UITextField*)sender;
if(textfield == iAmTheLastTextField)
{
// for example login now.
[self login];
}
}
「送信者」は変数の名前です。
「(id)」は、変数のタイプが「任意のオブジェクト」を表す「id」であることを意味します(必要に応じて、オブジェクト階層の最上部として表示できます)
メソッドの名前はpushButton:で、あらゆる種類のパラメーターが1つ必要です。
このメソッドは、UIのボタンにリンクされます。このUIのデリゲートはこの呼び出しを受け取り、呼び出しを行ったUIButtonへの参照を持ちます。必要ない場合もあれば、そのUIButtonにアクセスして、たとえばプロパティを変更する必要がある場合もあります。
これは、Cocoaの target-action mechanism の一部です。これは、オブジェクトが相互に通信できる1つの方法です。イベント(マウスクリックなど)に応答して、1つのオブジェクト(通常は何らかのコントロール)が別のオブジェクトにメッセージを送信します。送信者は「送信者」と呼ばれ、受信者は「ターゲット」であり、メッセージは「アクション」です。
ターゲットのメッセージハンドラでこれを使用して、送信者からアクションに関する追加情報を取得できます。
ラブスカトランから学びました。しかし、「送信者」が変数の名前であると言った部分のみを修正したいと思います。 (from Apple documentation- https://developer.Apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html ):
「アクションメッセージによって呼び出されるメソッドには、特定の署名があります。アクションメッセージを開始するオブジェクトへの参照を保持する単一のパラメーターです。慣例により、このパラメーターの名前はsenderです。たとえば、
それでIS Aパラメーター!
次に、(id)senderが複数のボタンから1つのIBActionにタグ情報を渡す例を示します。このビデオは、(id)アクションの送信者の概念を示しています。これは非常に有用であることがわかりました。