我的主 Storyboard 上有一堆 IB Action ,全部由文本标签顶部的按钮触发。因此,您点击按钮 1,它会执行代码标签 1,您点击按钮 2,它会执行标签 2 的代码,依此类推。
如果我为每个 IBAction 编写几乎相同的代码,我知道我做错了什么。在 ActionScript 中(回到过去!)我只是编写一个函数,并为每个按钮和标签引用实例名称。
我在下面包含了一段简化的代码。它工作正常,我只是想让它更有效率,但我不确定如何在 Xcode 中执行此操作。在此先感谢您的帮助!
- (IBAction)firstBtnPressed {
self.firstLabel.text = rightNow;
}
- (IBAction)secondBtnPressed {
self.secondLabel.text = rightNow;
}
最佳答案
您的实现完全没问题。如果需要,您可以在 IB 中给 UIButton
一个标记值,然后组合这些方法(将它们的两个操作都设置为同一方法):
- (IBAction)buttonPressed:(UIButton *)button {
if (button.tag == 0) {
self.firstLabel.text = rightNow;
} else if (button.tag == 1) {
self.secondLabel.text = rightNow;
}
}
你也可以使用开关:
switch (button.tag) {
case 0:
self.firstLabel.text = rightNow;
break;
case 1:
self.secondLabel.text = rightNow;
break;
default:
break;
}
我认为这就是您所追求的。如果我误解了什么,请告诉我。
编辑:
鉴于您有其中的 9 个,我个人会稍微改变一下我的方法。您可以将它们全部放入一个数组中并访问它们 [self.myLabels[button.tag] setText:rightNow];
但这仍然需要 9 个 IBOutlet。虽然没有问题,但其中有很多。
你可以做的另一件事是给他们一个标签,比相应的按钮高 20 点,然后在 IBAction 中做这样的事情:
UIView *viewToChange = [self.view viewWithTag:button.tag+20];
// used to protect yourself since IB allows the multiple views to have the same tag
if ([viewToChange isKindOfClass:[UILabel class]]) {
((UILabel *)viewToChange).text = rightNow;
}
这很简单,但它确实将您的逻辑与按钮和标签的标签值紧密绑定(bind)。这样做的好处是逻辑简单,所有 UILabel 都没有 IBOutlet!
关于ios - Xcode 中 IBAction 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690610/