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

Cra*_*Dev 36 xcode objective-c button ibaction ios

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

Joh*_*ker 56

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

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

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

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

  • 在使用故事板的Xcode 4.6中存在一个错误,它不允许其他连接.只需从按钮到代码建立所有连接(添加`IBACTION`方法,然后删除除一个之外的所有连接. (10认同)
  • 刚刚意识到你也可以通过按住CMD并选择全部来多选所有在IB中创建的UIButton,然后按住它拖动到代码中,它将创建一个连接到它的所有UIButton的单个IBAction. (5认同)

Big*_*ump 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 恩,那就对了.我添加了switch语句. (2认同)

Cal*_*leb 9

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

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