无法在Xcode中连接IBAction

时间:2015-02-26 01:23:59

标签: ios xcode swift

当我从故事板上的按钮拖动到我的视图控制器Swift文件时,我只能选择插入Outlet或Outlet Collection。

同样,如果我手动创建IBAction并尝试将其连接到故事板上的按钮,我就无法连接这两个。

此问题仅出现在我的某个项目中,但它出现在我项目中的所有故事板上。

似乎是一个Xcode错误,但也许有人知道一种解决方法。

(很难说,但截图中拖动的元素是一个按钮。)

enter image description here

13 个答案:

答案 0 :(得分:23)

我的Swift项目中有类似的问题让我很生气。

这就是在具有UIButton属性的@IBInspectable扩展中混合使用自定义协议的问题。更多细节如下。

我终于发现那是因为我的项目中有以下代码: (版权归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

答案 1 :(得分:8)

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

它可能有用。

答案 2 :(得分:5)

我无法说明根本原因 - 在XCode中似乎总是出现问题,但是你总是可以在你的视图/控制器中手动编写你的IBAction @IBAction func(sender: UIButton) { },然后从中控制拖动动作本身的故事板元素。如果这不起作用,请尝试从代码边缘的IBAction创建的节点链接回故事板。当XCode停止工作时,这对我有用。

答案 3 :(得分:3)

请务必选择Automatic

enter image description here

答案 4 :(得分:2)

这个bug确实超级疯狂。我因此失去了几个小时。 到目前为止,我发现了两个原因,我将在这里发帖,也许有人会阅读并提供帮助:

  1. 如果有人使用 BonMot 广告连播,这是一个可能的原因。如果您将其删除, IBAction 将会返回。

  2. UIButton UIBarButtonItem 的任何扩展名也可能导致此问题。评论扩展名, IBAction 将返回。快乐的编码。

  3. 更新: BonMot 4.0.2

    中解决了此问题

答案 5 :(得分:1)

这显然是Apple论坛上的一个已知问题,但我不知道Apple是否正在研究它:

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

以下是我为解决方法所做的工作。

  1. 进入我的Pod文件并注释掉正在执行扩展导致问题的pod库(在我的情况下,ReactiveKit Bond)。
  2. 执行pod update以从项目中删除pod。
  3. 像往常一样,回到IB并在IB中进行IBAction连接。尽可能多地一起提高效率。
  4. 最后返回并取消注释您的pod库并执行另一个pod update重新导入pod。
  5. 通过在新的IBAction函数中设置断点进行测试,以验证您的连接是否正常工作。

答案 6 :(得分:1)

对我来说,我试图将多个按钮连接到一个IBAction,在我切换方法签名以指定发件人是UIButton而不是{{1}之前,没有一个解决方案有效}

Any

答案 7 :(得分:0)

如果扩展导致问题,那么代替直接扩展UIButton,用户类型,例如,创建CustomButton的扩展而不是UIButton

typealias CustomButton = UIButton
extension CustomButton { }

答案 8 :(得分:0)

我遇到了同样的问题但是因为我试图将ImageView连接到IBAction(请原谅我,不确定我的术语是否正确)。我删除了ImageView对象并将其替换为Button和 然后IBAction成为一个选择,而不仅仅是IBOutlet和Outlet Collection。

答案 9 :(得分:0)

对我来说,它是一个FUIButton(来自SAP Fiori的定制)导致同样的问题。我自己的代码中没有指定pod或UIButton扩展名(除了SAP UIButton之外)。 Cmd + Alt + Shift + K,DerivedData Clean也没有帮助。 @IBAction在Interface Builder中不可用,直到我将Button类改回简单的UIButton。

而且......瞧!当当!

答案 10 :(得分:0)

好的,到了2019年,这个问题仍然会发生,如果有人在这里仍在寻找解决方案,那么我可以使其工作的唯一方法是:

  • 在扩展中编写您的IBAction函数
  • 在Interface Builder中,点击File的所有者或主视图
  • 在右侧工具栏上,单击“连接”检查器

List item

  • 从列表中查找并创建您创建的IBAction,它独自一人坐在那里,没有连接任何东西
  • 单击它旁边的空圆圈,然后将其拖到悲伤的悲伤按钮上

enter image description here

  • 看到悲伤的按钮现在又开心了,并连接到某个东西

答案 11 :(得分:0)

我的解决方案是从.xib文件中删除UIButton并再次添加。 .xib文件中似乎发生了一些奇怪的事情,读取它应该是一种快速修复。

答案 12 :(得分:0)

我也遇到了同样的问题,原因是我把XViewController的名字改成了YViewController,所以storyboard还是有在其 Identity Inspector 中使用相同的旧 XViewController 名称,如下所示:

enter image description here

您所要做的就是将视图控制器的名称更改为新名称,一切都会再次运行:)

enter image description here