无法在Xcode中连接IBAction

当我从故事板上的button拖到我的视图控制器Swift文件时,我只能select插入Outlet或Outlet集合。

同样,如果我手动创buildIBAction并尝试将其连接到故事板上的button,则无法连接两者。

这个问题只出现在我的一个项目中,但是发生在我项目的所有故事板上。

看起来像一个Xcode错误,但也许有人知道一个解决方法。

(很难说,但在屏幕截图中拖动的元素是一个button。)

在这里输入图像说明

我在Swift项目中遇到了非常类似的问题,这让我很生气。

它变成这是在具有@IBInspectable属性的UIButton扩展中混合自定义协议采用的问题。 下面更多细节。

我终于发现,这是因为我的项目中有以下代码:(版权归Kevin McNeigh所有: https ://www.iphonelife.com/blog/31369/swift-programming-101-mastering-dynamic-type-ios)

 protocol DynamicTypeChangeHandler { var typeObserver: Bool {get set} } extension UIButton: DynamicTypeChangeHandler { @IBInspectable var typeObserver: Bool { // ... } } 

如果我从扩展或@IBInspectable关键字中删除协议采用,我可以再次在Interface Builder中设置操作。 纯粹的疯狂。 Xcode <3

您可以尝试将@IBAction的参数从(_ sender: Any)更改为(_ sender: UIButton)(_ sender: AnyObject) ,但手动(_ sender: AnyObject)

它可能工作。

我不能说话的根本原因 – 东西似乎总是在XCode打破,但你总是可以手动写你的IBAction, @IBAction func(sender: UIButton) { } IBAction @IBAction func(sender: UIButton) { }在你的视图/控制器,然后控制拖动作本身的故事板元素。 如果这不起作用,请尝试从代码边缘的IBAction创build的节点链接回故事板。 当XCode停止工作时,这适用于我。

确保您selectAutomatic

在这里输入图像说明

这个bug确实超级疯狂。 我因此而失去了几个小时。 直到现在我发现了两个原因,我会在这里发布,也许有人会阅读和帮助:

  1. 如果有人使用BonMot吊舱,这是一个可能的原因。 如果你删除它, IBAction将会回来。

  2. UIButtonUIBarButtonItem上的任何扩展可能导致这种情况。 评论扩展, IBAction将回来。 快乐的编码。


更新: BonMot4.0.2中修复了这个问题

这显然是苹果论坛上的一个已知问题,但我不知道苹果是否正在开发它:

https://forums.developer.apple.com/message/216258

这是我为解决方法所做的。

  1. 进入我的Podfile,并注释掉pod库(在我的情况下,ReactiveKit债券)正在做一个扩展导致的问题。
  2. 执行pod update以从项目中移除吊舱。
  3. 回到IB中,像我通常那样做IBAction连接。 为了效率,尽可能地多做一些事情。
  4. 最后返回并取消注释你的豆荚库,并做另一个pod update重新导入豆荚。
  5. 通过在新的IBAction函数中设置断点来testing您的连接是否正常工作。

对我来说,我试图将多个button连接到一个IBAction ,没有解决scheme工作,直到我切换我的方法签名,指定发件人是一个UIButton而不是Any

 @IBAction func buttonPressed(_ sender: UIButton) { } 

如果扩展是导致问题,而不是直接扩展UIButton,用户typealias例如创buildCustomButton的扩展而不是UIButton

 typealias CustomButton = UIButton extension CustomButton { } 

我有同样的问题,但这是因为我试图将ImageView连接到IBAction(原谅我,不知道我的术语是否正确)。 我删除了ImageView对象,并用Button和IBAction代替,然后成为一个选项,而不仅仅是IBOutlet和Outlet Collection。