2016-09-20 66 views
19

我有一个奇怪的问题与Xcode 8.当我尝试按Ctrl +拖动按钮到现有的功能,我不能只能创建新的插座或行动。更奇怪的是,即使我通过ctrl + drag创建动作,我也无法将事件与我用于创建动作的按钮相连接。 IB图标也是空白的,就像动作和按钮之间没有连接一样,但是实时点击动作。 ,当我尝试连接的行动从快捷键另一方面,以故事情节,我可以(@IB图标变为“满”),但后来我得到异常实时点击无法识别的选择myActionWithSender enter image description here enter image description here无法将按钮动作拖到Xcode 8中的现有功能

回答

-2

要解决这个问题,我不得不从雨燕2.3

0

更新我的项目语言雨燕3.0在你.swift文件更改:

@IBAction func buttonClicked(sender: UIButton) { // Do something }

@IBAction func buttonClicked(z sender: UIButton) { // Do something }

只是增添了一 'Z'(或任何标签,你想要真的)。我尝试了一个下划线'_',并且这也起作用,但它提供了一个警告,所以我只是使用'z'来避开警告。

我认为这是Xcode 8中的一个bug。某处(IB可能)它期望符合Swift 3的代码,其中第一个参数必须有一个标签。所以当它看到单词“发件人”时,它假定(错误地)那是标签。因此,添加一个标签(在我的情况下是'z')使每个人都感到高兴。

Swift 2.3不需要标签。 Swift 3的确如此。所以,正如Jaroslaw所指出的,从2.3升级到3.0也会解决这个问题。但是如果你的项目在2.3上停滞不前,那么只需添加一个标签似乎就可以做到。

+0

奇怪遵守:如果我使用下划线“_”我可以从IB拖到功能名称代码,它突出显示了整个功能 - 并使连接成为可能。但是,如果我使用'z'或任何其他字母数字标签,我不能从IB拖放到函数名称。奇怪的。 – briggsm

22

在我的Xcode版本中,IBAction是使用“Any”参数而不是“AnyObject”自动创建的。用UIButton显式创建IBAction而不是为我工作。

+1

这也是我的解决方案。您也可以手动将Any更改为AnyObject它现有的代码,它的工作原理与广告一样。为什么Xcode默认为Any?感谢这个解决方案! – Scooter

+0

我不明白。你能澄清一下吗?什么和这个“任何”在哪里? – galactikuh

+1

@galactikuh在你的函数定义中,像'@IBAction func myFunction(_ sender:Any)'。 – JakeSteam

9

就我而言,您需要将Any更改为UIButton。它需要具体说明来自UIButton的操作。从任意到AnyObject

@IBAction func buttonClicked(_ sender: UIButton) { 

} 
0

更改发件人为我工作

0

即使在斯威夫特3,您想对@IBAction的说法改变从(_ sender: Any)(_ sender: UIButton)或(_ sender: AnyObject),但手动。

它可能工作

0

在我的情况下,我有一个类似的故事板打开。一旦我关闭它,然后 - 点击按钮一次,看到它周围的块对齐。 - 然后右键单击并拖动到ViewController。 - 最后,点击/点击你想将事件的代码块置于ViewController中的位置。

1

单击UIButton,然后从Utilities区域转到“Connections Inspector”。

点击事件旁边的空圈,将该行拖入func主体。

1

与在选择触开启按钮功能右键点击里面拖..u应该试试这个..