检测按下了哪个按钮

Posted

技术标签:

【中文标题】检测按下了哪个按钮【英文标题】:Detecting which button pressed 【发布时间】:2013-07-20 08:43:30 【问题描述】:

我希望能够。我想知道是否有一些 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 不接受多个按钮的相同方法?还有没有其他方法可以,而无需将特定操作连接到每个按钮?

【问题讨论】:

Xcode 以什么方式抱怨? 将多个控件连接到同一个操作方法是绝对可行的。您需要更具体地了解问题。 【参考方案1】:

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

然后你可以为属性检查器中的按钮分配不同的标签, 并在action方法中检查[sender tag]

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

【讨论】:

我知道它是如此简单,以至于当我得到答案时,我会觉得“当然”:-) 谢谢!【参考方案2】:

您似乎正在尝试将此Sample 复制粘贴到您的代码中,但它不起作用,对吧?您应该为按钮提供 Frame

这是工作代码:

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

这里,frame 不应该是静态的,否则 Button 会重叠。

【讨论】:

以上是关于检测按下了哪个按钮的主要内容,如果未能解决你的问题,请参考以下文章

检测按下了哪个按钮? (然后行动)

如何检测在 PyQt5 中按下了动态添加的按钮之一? [复制]

RadGridView 检测 CellClick 事件按钮

检测在 SwiftUI 中点击的系统警报按钮

如何检测是不是按下了向上按钮

如何检测是不是使用 sl4a 按下了菜单按钮?