7

私はこのようなUIButton配列を持っています:

@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *btn_Impact_Collection;

そして私はこの機能を持っています:

- (IBAction)impactAction:(id)sender;

XIBファイルには9つのボタンがあり、各ボタンは参照アウトレットコレクションを使用してbtn_Impact_Collection配列に接続されています。さらに、各ボタンのTouch_insideプロパティは、関数ImpactActionに接続されています。

これで、ボタンがクリックされるとImpactAction関数が呼び出されますが、この関数内で、どのボタンが押されたかをどのように知ることができますか?

答えてくれてありがとう!

4

4 に答える 4

16

送信者をUIButtonクラスにキャストすると、クリックされたボタンのインスタンスが得られます。私はXcodeを持っていませんが、次のようなものがあります。

if ([sender isMemberOfClass:[UIButton class]])
{
    UIButton *btn = (UIButton *)sender;

    // Then you can reference the title or a tag of the clicked button to do some further conditional logic if you want.
    if([btn.currentTitle isEqualToString:@"title of button"])
    {
        // do something.
    }
    else if(etc...)
}
于 2011-07-22T14:26:53.530 に答える
13

Interface Builder(1-9)で各ボタンにタグを設定し、次のように言います

if ([sender tag] == 1) {
//First button was pressed, react.
}
else if ([sender tag] == 2) {
//Second button was pressed, react.
}
// Etc...
else {
//Last button was pressed, react.
}

そして、他のすべてについても同じです。または、スイッチに入れることもできます。

于 2011-07-22T14:28:03.373 に答える
3

タイトルの文字列チェックを行うのではなく(時間がかかり、面倒な場合があります)、次のことができます。

- (void)buttonPressed:(id)sender
{
    for( UIButton *button in self.buttonCollection )
    {
        if( sender == button )
        {
            // sender is your button (eg. you can access its tag)
        }
    }
}
于 2013-03-12T13:21:14.753 に答える
0

別のオプション..送信者をキャストしてUIButtonであるかどうかを確認してから、sender.tagを切り替えます。

if ([sender isMemberOfClass:[UIButton class]]) {
        switch ([sender tag]) {
            case 0:
                //do stuff for button with tag 0
                break;

            case 1:
                //do stuff for button with tag 1
                break;

            case 2:
                ....
                break;

            default:
                break;
        }
    }
于 2014-12-10T17:53:55.757 に答える