IBAction
私が見たいくつかの:
- (IBAction)pushButton:(id)sender;
これ(id)sender
はいつ使用しますか?
IBAction
私が見たいくつかの:
- (IBAction)pushButton:(id)sender;
これ(id)sender
はいつ使用しますか?
Matt Gallowayは、(id) sender
iPhoneDevSDKフォーラムでのアクションの意味を次のように説明しました。
(id)senderは、そのセレクターにメッセージを送信したオブジェクトです。これは、関数などに制御を渡してもらうデリゲート関数のようなものです。
そのセレクターを呼び出している2つのオブジェクトがあり、それらを区別したい場合は、これを使用します。もちろん、2つの異なる関数を使用することもできますが、多くの場合、1つの関数を使用する方がクリーンで、コードの重複が少なくなります。
詳細については、 UIControlクラスリファレンスを参照してください。
その例として、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)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];
}
「sender」は変数の名前です。
「(id)」は、変数のタイプが「id」であることを意味します。これは、「任意のオブジェクト」を表します(必要に応じて、オブジェクト階層の最上位として表示できます)。
メソッドの名前はpushButton:であり、任意の種類の1つのパラメーターが必要です。
このメソッドは、UIのボタンにリンクされます。このUIのデリゲートはこの呼び出しを受け取り、呼び出しを行ったUIButtonへの参照を持ちます。たとえば、必要がない場合もあれば、そのUIButtonにアクセスしてプロパティを変更する必要がある場合もあります。
これは、Cocoaのターゲットアクションメカニズムの一部であり、オブジェクトが相互に通信できる1つの方法です。イベント(マウスクリックなど)に応答して、1つのオブジェクト(通常はある種のコントロール)が別のオブジェクトにメッセージを送信します。送信者は「送信者」と呼ばれ、受信者は「ターゲット」であり、メッセージは「アクション」です。
ターゲットのメッセージハンドラーでこれを使用して、送信者からアクションに関する追加情報を取得できます。
私はラブスカトランから学びました。しかし、「送信者」が変数の名前であると言った唯一の部分を修正したいと思います。(Appleのドキュメントから-https: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html):
「アクションメッセージによって呼び出されるメソッドには、特定のシグネチャがあります。アクションメッセージを開始するオブジェクトへの参照を保持する単一のパラメータです。慣例により、このパラメータの名前は送信者です。たとえば、
だからそれはパラメータです!
これは、(id)senderが複数のボタンから1つのIBActionにタグ情報を渡す例です。このビデオは、(id)送信者の動作の概念を示しています。これは非常に便利であることがわかりました。