IOS:一个用于多个按钮的IBAction

时间:2011-05-02 14:15:22

标签: objective-c xcode ios button ibaction

在我的项目中,我必须控制40个按钮的动作,但我不想创建40个IBAction,我可以只使用IBAction,怎么做?

7 个答案:

答案 0 :(得分:56)

如果您正在使用界面构建器来创建按钮,只需将它们指向相关类中的相同IBAction。

然后,您可以通过阅读按钮中的文字来区分IBAction方法中的按钮......

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

...或者在Xcode中设置tag属性并通过[sender tag]将其读回。 (如果使用此方法,请将标记设置为1,因为0是默认值,因此几乎没用。)

答案 1 :(得分: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;
}

答案 2 :(得分:9)

设置所有按钮以使用该动作。操作通常具有sender参数,您可以使用该参数来确定调用操作的按钮。告诉按钮之间区别的一种流行方法是为每个按钮的tag属性分配不同的值。因此,您可能有40个按钮,标签范围从1到40.(0可能不是标签的绝佳选择,因为这是默认值,并且您忘记设置标签的任何按钮将具有0作为标签值。)

当所有按钮执行大致相同的操作(如计算器或键盘上的按钮)时,此技术非常有用。如果每个按钮都做了完全不同的事情,那么你最终仍然会使用相当于40种方法,但是你可以用自己的switch语句替换Objective-C的消息传递系统。在这种情况下,通常最好只花时间创建所需数量的动作,以便适当地分配它们。

答案 3 :(得分:4)

不确定。只需将所有按钮连接到Interface Builder中的相同操作方法即可。使用方法的sender参数(可能与按钮'tag属性一起使用)来标识发送事件的按钮。

答案 4 :(得分:0)

只需使用一个IBAction并将其分配给所有按钮。

答案 5 :(得分:0)

我自己使用了上面的方法,选择了一些按钮但是将它们全部转换并使用了switch case而不是

-(IBAction)buttons:(id)sender
{

    switch ([sender tag])

    {

        case 0 :

    }
}

答案 6 :(得分:0)

好像你得到了你需要的所有答案,但我想补充其他人的答案。

您是否想要使用一个IBAction或40个动作取决于您希望按钮执行的操作。如果所有按钮完成不同的操作,则需要所有单独的IBAction,但如果您希望所有按钮都执行相同的操作,则只能使用一个。我需要有关这些按钮和操作的更多详细信息,但您可能每个按钮都有标题,因此您可以使用它来区分每个按钮并创建消息或按下特定按钮自定义的内容。这是一个例子。每次按下按钮时,标签显示一条消息,表示按下了“按钮的标题”。

通过这种方式,您不需要对所有40种模式进行切换。您仍然可以通过仅用2-3行代码按下按钮来显示或执行个性化的操作。

- (IBAction)button_Clicked:(UIButton *)sender {

    //Get the buttons' titles.
    NSString *title =[sender titleForState:UIControlStateNormal];

    //Construct a message that includes the *title. 
    NSString *plainText=[NSString stringWithFormat:@"%@ button pressed.", title];

    //Assigns the *plainText to the label. 
    self.Label.text=plainText;

}
@end