ios - Xcode 中 IBAction 的函数?

标签 ios xcode

我的主 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/

相关文章:

objective-c - NSPredicate 计数 NSString 的数量

ios - Pod安装Realm 3.1.1失败

ios - Whatsapp 类型编辑按钮 IOS master detail app

ios - 如何为 iPhone 构建 Boost-Libraries

ios - CoreLocation : CLClient is deprecated. Will be obsoted soon.in iPhone

java - iOS 开发者的第一个 Android 应用程序

ios - 如何调试 dsymutil 错误 : "Clang modules are expected to have exactly 1 compile unit."

ios - React Native 移除 IOS 中的默认启动器或闪屏

ios - 在 iPad 上使用 window.overrideUserInterfaceStyle 时暗模式未启用/禁用

ios - 如何在 Xcode 10 中打开 Xcode 11 Beta 4 项目?