当我从故事板上的按钮拖动到我的视图控制器Swift文件时,我只能选择插入Outlet或Outlet Collection。
同样,如果我手动创建IBAction并尝试将其连接到故事板上的按钮,我就无法连接这两个。
此问题仅出现在我的某个项目中,但它出现在我项目中的所有故事板上。
似乎是一个Xcode错误,但也许有人知道一种解决方法。
(很难说,但截图中拖动的元素是一个按钮。)
答案 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
。
答案 4 :(得分:2)
这个bug确实超级疯狂。我因此失去了几个小时。 到目前为止,我发现了两个原因,我将在这里发帖,也许有人会阅读并提供帮助:
如果有人使用 BonMot 广告连播,这是一个可能的原因。如果您将其删除, IBAction 将会返回。
UIButton 或 UIBarButtonItem 的任何扩展名也可能导致此问题。评论扩展名, IBAction 将返回。快乐的编码。
更新: BonMot 在 4.0.2
中解决了此问题答案 5 :(得分:1)
这显然是Apple论坛上的一个已知问题,但我不知道Apple是否正在研究它:
https://forums.developer.apple.com/message/216258
以下是我为解决方法所做的工作。
pod update
以从项目中删除pod。 pod update
重新导入pod。 答案 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年,这个问题仍然会发生,如果有人在这里仍在寻找解决方案,那么我可以使其工作的唯一方法是:
答案 11 :(得分:0)
我的解决方案是从.xib文件中删除UIButton并再次添加。 .xib文件中似乎发生了一些奇怪的事情,读取它应该是一种快速修复。
答案 12 :(得分:0)