检测按下哪个按钮

时间:2013-07-20 08:43:30

标签: objective-c uibutton action programmatically-created

我希望能够检测到按下了哪个按钮。我想知道是否有一些UIButton类方法可以在按下按钮时自动调用,这允许我找出按下按钮的文本或标签并将其传递给变量?还是一些做同样的Objective-c事件方法?

我知道此主题之前已在此处发布。常见的反应似乎是这将是解决方案:

在.h文件中

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

在.m文件中

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

我还看过其他名字的例子,如buttonPressed,onButtonTao等。

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

以下在Stack发布的示例使用相同的操作,但是以编程方式:

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不接受多个按钮的相同方法?还有其他方法可以检测按下哪个按钮而不将特定操作连接到每个按钮吗?

2 个答案:

答案 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];
}

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

答案 1 :(得分:0)

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

enter image description here

然后,您可以为“属性”检查器中的按钮指定不同的标记,  并在操作方法中检查[sender tag]

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