web-dev-qa-db-ja.com

目標C:「(id)送信者」とは何ですか?

いくつかのIBActionで私は見た:

- (IBAction)pushButton:(id)sender;

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

36
CrazyDev
(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];
}
36
fuzz

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];
   }
}
62
Ahmad Kayyali

「送信者」は変数の名前です。

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

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

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

5
Pierre Watelet

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

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

1
outis

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

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

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

それでIS Aパラメーター!

0
dung

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

iPhoneプログラミング-(id)送信者の説明

0
theMouse