不能 link 一个条形按钮到超类中的 @IBAction

Can't link a bar button to an @IBAction in superclass

我有许多视图控制器,每个视图控制器都有自己的菜单按钮(UIBarButton,已添加到情节提要中)。现在我想 link 所有这些在它们的 superclass 中达到一个单一的 @IBAction 函数(superclass 对于所有具有该菜单按钮的视图控制器都是相同的)。

现在我已经 linked up @IBOutlets 到超级 class,但它似乎不适用于 @IBActions,即使函数不是私有的,它绝对是 superclass 的一部分(我正在重构,之前它是每个 class 中的 @IBAction,它只做了 menuButtonTap()(调用 superclass).

中的方法

有什么想法吗?

我已经通过在超类上手动创建一个 @IBAction 并赋予它们与我在子类中创建的名称相同的名称来解决问题。然后我删除了子类中的那些。根据 Xcode,这从故事板中留下了 'dangling reference',但我知道它在那里。

您可以像从子视图向 UITabbar 按钮添加动作时那样做 class。

假设 btn 是一个 UIBarButtonItem,

[btn setTarget:self.superview];

[btn setAction:@selector(menuButtonTap:)] 

您是否偶然使用了 __unused 关键字?如果你这样做,IBAction 将不会出现在情节提要中(我正在使用 Xcode 6.3.2)

- (IBAction)actionBack:(__unused id)sender;
vs
- (IBAction)actionBack:(id)sender;

为了使其显示和可选,删除了 __unsused 关键字。

尽管从 Xcode 9.4 开始,这对于通用 UIViewController 仍然不起作用(但您的解决方法仍然有效),请注意,它可以按预期用于 UITableViewCell 模板在情节提要中。

如果情节提要中的某些模板单元共享包含 @IBOutlet 属性的相同基础 class,您将能够像往常一样将它们 link 到每个模板单元实例:

然后 Xcode 将显示一个弹出窗口,告知 link 在哪个原型单元格中“支持”:

我不确定为什么这第二步是必要的,因为您指定了来自 给定原型单元

中的特定组件