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 会抱怨。

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

4

2 回答 2

0

看起来您正在尝试将此示例复制粘贴到您的代码中,但它不起作用,对吧?您应该为按钮提供框架。

这是工作代码:

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

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

于 2013-07-20T09:28:10.753 回答
0

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

在此处输入图像描述

然后你可以在 Attributes Inspector 中为按钮分配不同的标签,并签[sender tag]入 action 方法。

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

于 2013-07-20T09:30:33.533 回答