IOS:一个IBAction多个button
在我的项目中,我必须控制40个button的动作,但是我不想创build40个IBAction,我可以只使用一个IBAction,怎么样?
如果使用界面生成器来创buildbutton,只需将它们指向相关类中的相同IBAction即可。
然后,您可以通过读取button上的文本来区分IBAction方法中的button…
- (IBAction)buttonClicked:(id)sender { NSLog(@"Button pressed: %@", [sender currentTitle]); }
…或通过在Xcode中设置tag
属性并通过[sender tag]
读回。 (如果使用这种方法,请从1开始标记,因为0是默认值,因此很less使用。)
-(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; }
设置所有的button来使用这一个动作。 动作通常有一个sender
参数,你可以用它来确定哪个button正在调用动作。 分辨button之间差异的一种stream行方式是为每个button的tag
属性分配不同的值。 所以你可能有40个button,标签的范围从1到40.(0对于一个标签来说可能不是一个好的select,因为这是默认值,任何你忘记设置标签的button都会有0标签值。)
当所有button的function大致相同时,如计算器或键盘上的button,此技巧非常有用。 如果每个button都做了完全不同的事情,那么最后还是会有40个方法,但是用Objective-C的消息系统replace自己的switch语句。 在这种情况下,花费时间来创build尽可能多的动作就更好了。
当然。 只需将所有button连接到Interface Builder中相同的操作方法即可。 使用方法的sender
参数(可能与button的tag
属性一起)来标识哪个button正在发送事件。
只需使用一个IBAction并将其分配给所有button。
刚刚使用了上面的方法,有一个button的select,但全部转换它们,而使用开关盒
-(IBAction)buttons:(id)sender { switch ([sender tag]) { case 0 : } }
似乎你正在得到你需要的所有答案,但我想增加其他人的答案。
无论您想使用一个IBAction还是40个操作,都取决于您想要的button。 如果所有的button完全不同,你需要所有独立的IBAction,但是如果你想要所有的button都做同样的事情,你可以只使用一个。 我需要这些button和动作的更多细节,但是每个button可能都有标题,所以您可以使用它来区分每个button并创build一个消息或按特定button进行定制的东西。 这里是例子。 每按一次button,标签就会显示一条消息,说明按下了“button的ietitle”。
通过这样做,你不需要做全部40种模式的切换。 你仍然可以显示或做一些个人化的button,只需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