36

私のプロジェクトでは、40個のボタンのアクションを制御する必要がありますが、40個のIBActionを作成したくないのですが、IBActionのみを使用できますか?

4

7 に答える 7

56

Interface Builderを使用してボタンを作成している場合は、関連するクラスの同じIBActionにボタンを向けるだけです。

次に、ボタンからテキストを読み取ることにより、IBActionメソッド内のボタンを区別できます...

- (IBAction)buttonClicked:(id)sender {
    NSLog(@"Button pressed: %@", [sender currentTitle]);    
}

...またはtagXcodeでプロパティを設定し、を介してそれを読み戻すことによって[sender tag]。(このアプローチを使用する場合は、タグを1から開始します。これは、0がデフォルトであり、ほとんど使用されないためです。)

于 2011-05-02T14:20:38.380 に答える
12
-(IBAction)myButtonAction:(id)sender {
    if ([sender tag] == 0) {
        // do something here
    }
    if ([sender tag] == 1) {
        // Do something here
    }    
}

// in Other words

-(IBAction)myButtonAction:(id)sender {
        switch ([sender tag]) {
        case 0:
            // Do something here
            break;
        case 1:
           // Do something here
             break;
       default:
           NSLog(@"Default Message here");
            break;
}
于 2012-12-26T17:05:55.733 に答える
9

その1つのアクションを使用するようにすべてのボタンを設定します。アクションには通常sender、どのボタンがアクションを呼び出しているかを把握するために使用できるパラメーターがあります。ボタンの違いを区別する一般的な方法の1つは、各ボタンのtagプロパティに異なる値を割り当てることです。したがって、1〜40の範囲のタグを持つ40個のボタンがある可能性があります(0はデフォルト値であるため、タグにはおそらく適切な選択ではありません。タグの設定を忘れたボタンには、0が付けられます。タグ値。)

この手法は、電卓やキーボードのボタンのように、すべてのボタンがほぼ同じことを行う場合に最も役立ちます。各ボタンが完全に異なることを行う場合でも、40のメソッドに相当するものになりますが、Objective-Cのメッセージングシステムの代わりに独自のswitchステートメントを使用します。その場合、適切に割り当てるために必要な数のアクションを作成するために時間を費やす方がよい場合がよくあります。

于 2011-05-02T14:18:59.950 に答える
4

もちろん。InterfaceBuilderの同じアクションメソッドにすべてのボタンを接続するだけです。メソッドのsender引数を(おそらくボタンのプロパティと組み合わせてtag)使用して、どのボタンがイベントを送信しているかを識別します。

于 2011-05-02T14:17:10.197 に答える
0

1つのIBActionを使用して、それをすべてのボタンに割り当てるだけです。

于 2011-05-02T14:17:07.377 に答える
0

上記の方法を自分で使用し、ボタンを選択しましたが、それらをすべて変換し、代わりにスイッチケースを使用しました

-(IBAction)buttons:(id)sender
{

    switch ([sender tag])

    {

        case 0 :

    }
}
于 2013-04-15T13:19:18.190 に答える