我对Xcode 8有一个奇怪的问题。当我尝试按住Ctrl +拖动按钮到现有功能时,我无法创建新的插座或动作。更奇怪的是,即使我通过ctrl + drag创建动作,我也无法将事件与我用于创建动作的相同按钮连接起来。 IB图标也是空白的,就像动作和按钮之间没有连接,但实时点击运行动作。
另一方面,当我尝试将动作连接到从swift到storyboard的按钮时,我可以(@IB图标变为"完全")但是然后我实时点击无法识别的选择器myActionWithSender获得异常
{{3}}
答案 0 :(得分:22)
在我的Xcode版本中,IBAction是使用“Any”参数自动创建的,而不是“AnyObject”。使用UIButton显式创建IBAction对我来说很有用。
答案 1 :(得分:11)
在我的情况下,您需要将Any更改为UIButton。需要具体说明来自UIButton的行动。
@IBAction func buttonClicked(_ sender: UIButton) {
}
答案 2 :(得分:2)
单击UIButton,然后转到" Connections Inspector"来自公用事业区。
点击事件旁边的空白圆圈,然后将该线条拖动到func正文中。
答案 3 :(得分:1)
右键单击并在内部选择touchup中打开按钮功能拖动..u应该试试这个..
答案 4 :(得分:0)
在.swift文件中更改:
@IBAction func buttonClicked(sender: UIButton) {
// Do something
}
到
@IBAction func buttonClicked(z sender: UIButton) {
// Do something
}
只需添加一点' z' (或者你想要的任何标签)。我尝试了一个下划线' _',这也有效,但是它会发出警告,所以我只是使用了一个' z'而是绕过警告。
我相信它是Xcode 8中的一个错误。某处(可能是IB)它期望符合Swift 3的代码,其中第一个参数必须有一个标签。所以,当它看到"发送者"它假设(错误地)是标签。因此,添加标签(在我的情况下,' z')让每个人都感到高兴。
Swift 2.3不需要标签。 Swift 3可以。因此,正如Jaroslaw所指出的,从2.3升级到3.0也将解决这个问题。但是如果你的项目被卡在2.3上,那么只需添加一个标签就可以了。
答案 5 :(得分:0)
将发件人从Any更改为AnyObject对我有用
答案 6 :(得分:0)
即使在Swift 3中,您也希望将@IBAction
的参数从(_ sender: Any)
更改为(_ sender: UIButton)
或(_ sender: AnyObject)
,但需要手动更改。
它可能有用。
答案 7 :(得分:0)
在我的情况下,我有一个类似的故事板打开。一旦我关闭它然后 - 单击按钮一次以查看其周围的块以进行对齐。 - 然后右键单击并将其拖动到ViewController。 - 最后,单击/点击要将事件的代码块放在ViewController中的位置。
答案 8 :(得分:-2)
要修复它,我必须将我的项目语言更新为Swift 3.0中的Swift 3.0