38

IBAction私が見たいくつかの:

- (IBAction)pushButton:(id)sender;

これ(id)senderはいつ使用しますか?

4

6 に答える 6

62

Matt Gallowayは、(id) senderiPhoneDevSDKフォーラムでのアクションの意味を次のように説明しました。

(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];
   }
}
于 2011-04-07T08:32:01.053 に答える
39
(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];
}
于 2011-04-07T08:44:37.017 に答える
5

「sender」は変数の名前です。

「(id)」は、変数のタイプが「id」であることを意味します。これは、「任意のオブジェクト」を表します(必要に応じて、オブジェクト階層の最上位として表示できます)。

メソッドの名前はpushButton:であり、任意の種類の1つのパラメーターが必要です。

このメソッドは、UIのボタンにリンクされます。このUIのデリゲートはこの呼び出しを受け取り、呼び出しを行ったUIButtonへの参照を持ちます。たとえば、必要がない場合もあれば、そのUIButtonにアクセスしてプロパティを変更する必要がある場合もあります。

于 2011-04-07T08:35:13.537 に答える
1

これは、Cocoaのターゲットアクションメカニズムの一部であり、オブジェクトが相互に通信できる1つの方法です。イベント(マウスクリックなど)に応答して、1つのオブジェクト(通常はある種のコントロール)が別のオブジェクトにメッセージを送信します。送信者は「送信者」と呼ばれ、受信者は「ターゲット」であり、メッセージは「アクション」です。

ターゲットのメッセージハンドラーでこれを使用して、送信者からアクションに関する追加情報を取得できます。

于 2011-04-07T08:38:18.403 に答える
0

私はラブスカトランから学びました。しかし、「送信者」が変数の名前であると言った唯一の部分を修正したいと思います。(Appleのドキュメントから-https: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html):

「アクションメッセージによって呼び出されるメソッドには、特定のシグネチャがあります。アクションメッセージを開始するオブジェクトへの参照を保持する単一のパラメータです。慣例により、このパラメータの名前は送信者です。たとえば、

  • (void)moveToEndOfLine:(id)sender; //NSResponder.hから"

だからそれはパラメータです!

于 2011-04-15T18:06:58.843 に答える
0

これは、(id)senderが複数のボタンから1つのIBActionにタグ情報を渡す例です。このビデオは、(id)送信者の動作の概念を示しています。これは非常に便利であることがわかりました。

iPhoneプログラミング-(id)senderの説明

于 2012-03-03T01:36:10.183 に答える