我的故事板中有一个巨大的疯狂场景,它有 36 个不同的按钮,每个按钮在点击时都有不同的含义。我真的不想创建 36 种不同的方法,所以我如何在按下 36 个按钮之一时调用的方法中引用按钮标题或按钮名称。
这可能是一个简单的问题,但我是 iOS 和 Objective C 的新手......
谢谢!
我的故事板中有一个巨大的疯狂场景,它有 36 个不同的按钮,每个按钮在点击时都有不同的含义。我真的不想创建 36 种不同的方法,所以我如何在按下 36 个按钮之一时调用的方法中引用按钮标题或按钮名称。
这可能是一个简单的问题,但我是 iOS 和 Objective C 的新手......
谢谢!
您可以创建一个方法,如下所示:
- (IBAction)buttonTapped:(id)sender{
// The button that was tapped is called "sender"
// This will log out the title of the button
//NSLog(@"Button: %@", sender.titleLabel.text);
//Edit: You need a cast in the above line of code:
NSLog(@"Button: %@", ((UIButton *)sender).titleLabel.text);
}
然后,您可以使用 Interface Builder 连接到所有按钮。您可以使用某种 if/else 逻辑来测试点击了哪个按钮。
您可以检查 titleLabel 属性,或者您可以IBOutlet
为每个按钮分配一个并检查它。
例如:
if([sender isEqual:buttonOutlet1]){
//If this button is attached to buttonOutlet1
//do something
}
或者,您可以简单地使用每个按钮的标签,而不用担心插座。
第三种选择是在代码中生成和布局按钮,然后将它们作为按钮数组的元素进行访问。
第四种选择是将标签添加到按钮并在您的函数中检查按钮的标签。
给每个按钮一个唯一的标签值。在 IBAction 中,sender.tag 告诉您点击了哪个按钮。
您为处理按钮按下而设置的 IBAction 例程有一个sender
参数。检查决定。
这很简单,但是由于您是新手,所以这里有一个答案。
(根据斯坦福 cs193p 课程,2010-2011 秋季(这就是他们对计算器应用程序所做的))制作一个接收参数的方法,即 UIButton。例如:
- (IBAction) someMethodThatDoesSomething:(UIButton *)sender;
然后根据sender.titleLabel.text
我不知道是否有其他解决方案进行if语句。希望这可以帮助!
-(IBAction) buttonPress: (id) sender {
UIButton *pressedButton = (UIButton *)sender;
NSString *buttonTitle = [pressedButton currentTitle];
if ([buttonTitle isEqualToString: @"SomeTitle"]) {
//do work for that button.
}
}
您可以使用各种 NSString 方法来比较或过滤哪个按钮被按下并通过 if 或开关进行处理。
-(IBAction)myButtonAction:(id)sender {
if ([sender tag] == 0) {
// do something here
}
if ([sender tag] == 1) {
// Do some think here
}
}
// 换句话说
-(IBAction)myButtonAction:(id)sender {
NSLog(@"Button Tag is : %i",[sender tag]);
switch ([sender tag]) {
case 0:
// Do some think here
break;
case 1:
// Do some think here
break;
default:
NSLog(@"Default Message here");
break;
}