UIButton 在向其添加扩展后停止在界面生成器中显示 UIControl 操作

UIButton stop showing UIControl actions in interface builder after adding extension to it

我有最简单的UI——只有一个按钮:

如您所见,我可以将任何事件(如 UITouchUpInside)从界面生成器拖到我的代码中。

但是如果我向 UI 按钮添加一些扩展,例如:

protocol SomeProtocol {}

extension UIButton: SomeProtocol {}

那些事件不再可见:

我正在使用 Xcode 版本 8.2 (8C38)

我能以某种方式return他们吗?这是 Xcode 中的错误吗?

我遇到了一个类似的问题,我无法 link 自定义 class 到 outlets 和 IBActions。 在我的例子中,我不得不使用标准的 UIKit classes 来 link 我的对象到 IBOutlet,然后我修改了代码以满足我的需要。

这似乎是一个 Xcode 错误。

A workaround you could try is to extend UIControl with the protocol. UIControl is the superclass of UIButton, so extensions to UIControl are inherited by UIButton, and Xcode doesn't seem to be upset when a protocol is adopted by UIControl.

protocol SomeProtocol { }

extension UIControl: SomeProtocol { }

来自苹果开发者论坛

Adding a Swift protocol to UIButton breaks Interface Builder action options.