2012-01-31 7 views
3

ボタンを押したときにセレクタとして応答する複数のメソッドを追加したいとします。ボタンを押したときに呼び出されるメソッドは2つありますか?ボタンのターゲットとセレクタを複数のメソッドに設定する

私の研究では、目的関数-cプログラミング言語ガイドで、ボタンがセレクタと同じ名前のAllメソッドを呼び出すことがわかりました。

  1. は、アレイ内のオーディオファイルに
  2. 表示ビューを再生する:

    は、私は私のボタンを同時に2つのアクションをやりたいです。 *プレイ= [:UIBarButtonSystemItemPlay ターゲット:自己 アクション:[UIBarButtonItemのalloc] initWithBarButtonSystemItem @selector(:)遊ぶ]

    UIBarButtonItem。

アドバイスをお待ちしています。

おかげ

+0

セレクタを使用する予定のコードを表示できますか? – dasblinkenlight

+0

素晴らしい質問です。このコミュニティに役立ち、完璧です。私は書式と説明を少しはっきりさせるために少し編集しましたが、全体として、良い質問です。 – Andrew

答えて

10

@selector()文字通り単なる名前ですSEL値を、(実際には、ボンネットの下に、それは文字通りの文字列です)を返します。特定の動作を指定するものではありません。クラスは、セレクタに送信されたときに応答する方法を選択します。

あなたは確かにそのメソッドがコントロールのアクションであるためにクラスが2つのことを行いメソッドを実装し、セレクタを設定している可能性があり:

- (void)eatCakeAndIceCream { 
    [self eatCake]; 
    [self eatIceCream]; 
} 

あなたはまた、の繰り返し呼び出してコントロールに複数のアクションを追加することができますaddTarget:action:forControlEvents:

+0

あなたは私がそれをどうやってできるか教えてください – user1120133

4

特定のイベントに対して複数のターゲットアクションペアを指定できます。

[btn addTarget:self action:@selector(playSound:) forControlEvents:UIControlEventTouchUpInside]; 
[btn addTarget:self action:@selector(displayViews:) forControlEvents:UIControlEventTouchUpInside]; 
1

オブジェクトにターゲットを追加するたびに、それは(コントロールオブジェクトの型がUIコントロールである)(も「アクションメッセージ」と呼ばれる)コントロールオブジェクトを作成します。この制御オブジェクトには、「アクションセレクタ」と呼ばれるセレクタの名前と、このセレクタを呼び出す必要があるターゲットが含まれます。このコントロールオブジェクトは、指定されたイベントでバインド(登録)されます。複数のコントロールオブジェクトを同じイベントにバインドすることができます。つまり、2つのセレクタで2つのターゲットを持つことができ、同じイベントにバインドすることができます。実行時に

[btn addTarget:oneTarget action:@selector(foo:) forControlEvents:UIControlEventTouchUpInside]; 

[btn addTarget:twoTarget action:@selector(bar:) forControlEvents:UIControlEventTouchUpInside]; 

これらの制御メッセージの全ては、適切なターゲットにディスパッチされる所与のイベントに結合する、換言すれば、これらすべての選択方法は、それぞれのターゲット・クラス・オブジェクトに対して呼び出されます。

関連する問題