2013-07-20 99 views
1

我想要检测按下哪个按钮。我想知道是否有一些UIButton类的方法可以在按下按钮时自动调用,这使我能够找到按下按钮的文本或标记并将其传递给变量?或者一些相同的objective-c事件方法?检测按下哪个按钮

我知道这个话题已经发布在这里。常见的反应似乎是,这将是解决办法:

在.h文件中

- (IBAction)buttonClicked:(UIButton *)sender; 

在.m文件

- (IBAction)buttonPressed:(UIButton *)sender{ 
// Do something her to display which button pressed 
} 

我也看到其他的例子,其名称buttonPressed ,onButtonTao等

所以我假设这个方法必须从每个按钮调用。然而,这不起作用,当我尝试将同一个方法分配给多个按钮时,xcode会抱怨。

下面的例子,在这里张贴在堆栈,使用相同的动作,但编程:

for(int i = 0; i < 5; i++) { 
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [aButton setTag:i]; 
    [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [aView addSubview:aButton]; 
} 

// then ... 

- (void)buttonClicked:(UIButton*)button 
{ 
    NSLog(@"Button %ld clicked.", (long int)[button tag]); 
} 

所以,我在这里失踪,为什么Xcode中不接受多个按钮同样的方法?还有其他一些方法可以检测哪个按钮被按下,而无需将特定操作连接到每个按钮?

+1

Xcode以什么方式抱怨? – Wain

+1

将多个控件连接到相同的操作方法是绝对有可能的。你需要对问题更具体。 –

回答

0

您可以将多个按钮连接到Xcode中的相同操作方法。 创建和.h文件中的第一个动作,控制拖动了其余按钮 连接到现有的动作后:

enter image description here

然后你就可以在属性检查器分配不同的标签按钮, 和检查[sender tag]在行动方法。

如果您使用相同的名称创建新动作,则Xcode 将创建另一个具有相同名称的方法,这会由于“重复声明”而导致编译器错误 。

+0

我知道这很简单,当我得到答案时,我会感到“当然”:-)谢谢! –

0

它看起来像你试图复制粘贴这Sample到你的代码,它不工作,对不对?您应该提供框架到按钮。

这里是工作代码:

for(int i = 0; i < 5; i++) 
{ 
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    aButton.frame = CGRectMake(10 + i*50,10,50,50); 
    [aButton setTag:i]; 
    [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:aButton]; 
} 

这里,框架不应是静态的,否则按钮会重叠。