繁体   English   中英

IOS:一个 IBAction 用于多个按钮

[英]IOS: one IBAction for multiple buttons

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

如果您使用界面生成器创建按钮,只需将它们指向相关 class 中的相同 IBAction。

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

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

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

-(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;
}

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

当所有按钮都做大致相同的事情时,这种技术最有用,比如计算器或键盘上的按钮。 如果每个按钮都做完全不同的事情,那么你仍然会得到相当于 40 个方法的结果,但是你用你自己的 switch 语句代替了 Objective-C 的消息传递系统。 在这种情况下,最好花时间创建尽可能多的操作,并适当地分配它们。

当然。 只需将所有按钮连接到 Interface Builder 中的相同操作方法。 使用方法的sender参数(可能与按钮的tag属性结合使用)来识别哪个按钮正在发送事件。

我自己只是使用了上述方法,选择了一些按钮,但将它们全部转换并使用了开关盒

-(IBAction)buttons:(id)sender
{

    switch ([sender tag])

    {

        case 0 :

    }
}

似乎您正在获得所需的所有答案,但我想添加到其他所有人的答案中。

无论您要使用一个 IBAction 还是 40 个操作,都取决于您希望按钮执行的操作。 如果所有按钮都做完全不同的事情,您需要所有单独的 IBAction,但如果您希望所有按钮都做同样的事情,您可以只使用一个。 我需要有关这些按钮和操作的更多详细信息,但您可能有每个按钮的标题,因此您可以使用它来区分每个按钮并创建一条消息或由按下的特定按钮自定义的内容。 这是示例。 每次按下按钮时,label 都会显示一条消息,显示“按下按钮的 ietitle”。

通过这种方式,您不需要对所有 40 种模式进行 switch case。 只需 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM