我对Xcode8有一个奇怪的问题。当我尝试ctrl+拖拽按钮到现有功能时,我不能我只能创建新的插座或动作。更奇怪的是,即使当我通过ctrl+拖动创建动作时,我也无法将事件连接到我用来创建动作的同一个按钮。IB图标也是空白的,就像动作和按钮之间没有连接一样,但实时点击会运行动作。另一方面,当我尝试将动作与按钮从快速连接到故事板时,我可以(@IB图标变为“Full”),但在实时点击无法识别的选择器myActionWithSender
时出现异常
nwnhqdif1#
在我的Xcode版本中,IBAction是使用“any”参数而不是“AnyObject”自动创建的。相反,使用UIButton显式创建IBAction对我很有效。
axkjgtzd2#
在我的情况下,您需要将ANY更改为UIBUTTON。需要具体说明的是,这一行动来自UIButton。
@IBAction func buttonClicked(_ sender: UIButton) { }
68bkxrlz3#
点击UIButton,然后从实用程序区域转到“Connections Inspector”。点击事件旁边的空圈,然后将线拖入Func Body。
slsn1g294#
在您的.wift文件更改中:@IBAction func buttonClicked(sender: UIButton) { // Do something }至@IBAction func buttonClicked(z sender: UIButton) { // Do something }只需加上那个小‘z’(或者你真正想要的任何标签)。我尝试了下划线‘_’,这也很管用,但它会给出一个警告,所以我只用了一个‘z’来绕过警告。我认为这是Xcode8中的一个错误。在某个地方(可能是IB),它期望第一个参数必须有标签的符合SWIFT 3的代码。因此,当它看到“发送者”这个词时,它会(错误地)认为这就是标签。因此,添加一个标签(在我的情况下是‘z’)会让每个人都很高兴。SWIFT 2.3不需要标签。斯威夫特3做到了。因此,正如Jaroslaw指出的那样,从2.3升级到3.0也可以绕过这个问题。但如果你的项目停留在2.3版,只需添加一个标签似乎就能奏效。
@IBAction func buttonClicked(sender: UIButton) { // Do something }
@IBAction func buttonClicked(z sender: UIButton) { // Do something }
4xy9mtcn5#
将发件人从Any更改为AnyObject对我有效
hk8txs486#
即使在SWIFT 3中,您也希望将@IBAction的参数从(_ sender: Any)更改为(_ sender: UIButton)或(_ sender: AnyObject),但要手动更改。这也许能行得通。
@IBAction
(_ sender: Any)
(_ sender: UIButton)
_ sender: AnyObject)
nue99wik7#
在我的例子中,我打开了一个类似的故事板。一旦我关闭它,然后点击按钮一次,以查看它周围的方块是否对齐。-然后单击鼠标右键并将其拖动到视图控制器。-最后,点击/点击你想要在视图控制器中放置事件代码块的位置。
t40tm48m8#
右击选择TouchUp内侧的打开按钮功能进行拖动。
huus2vyu9#
要修复它,我必须将我的项目语言从SWIFT 2.3更新到SWIFT 3.0
9条答案
按热度按时间nwnhqdif1#
在我的Xcode版本中,IBAction是使用“any”参数而不是“AnyObject”自动创建的。相反,使用UIButton显式创建IBAction对我很有效。
axkjgtzd2#
在我的情况下,您需要将ANY更改为UIBUTTON。需要具体说明的是,这一行动来自UIButton。
68bkxrlz3#
点击UIButton,然后从实用程序区域转到“Connections Inspector”。
点击事件旁边的空圈,然后将线拖入Func Body。
slsn1g294#
在您的.wift文件更改中:
@IBAction func buttonClicked(sender: UIButton) { // Do something }
至
@IBAction func buttonClicked(z sender: UIButton) { // Do something }
只需加上那个小‘z’(或者你真正想要的任何标签)。我尝试了下划线‘_’,这也很管用,但它会给出一个警告,所以我只用了一个‘z’来绕过警告。
我认为这是Xcode8中的一个错误。在某个地方(可能是IB),它期望第一个参数必须有标签的符合SWIFT 3的代码。因此,当它看到“发送者”这个词时,它会(错误地)认为这就是标签。因此,添加一个标签(在我的情况下是‘z’)会让每个人都很高兴。
SWIFT 2.3不需要标签。斯威夫特3做到了。因此,正如Jaroslaw指出的那样,从2.3升级到3.0也可以绕过这个问题。但如果你的项目停留在2.3版,只需添加一个标签似乎就能奏效。
4xy9mtcn5#
将发件人从Any更改为AnyObject对我有效
hk8txs486#
即使在SWIFT 3中,您也希望将
@IBAction
的参数从(_ sender: Any)
更改为(_ sender: UIButton)
或(_ sender: AnyObject)
,但要手动更改。这也许能行得通。
nue99wik7#
在我的例子中,我打开了一个类似的故事板。一旦我关闭它,然后点击按钮一次,以查看它周围的方块是否对齐。-然后单击鼠标右键并将其拖动到视图控制器。-最后,点击/点击你想要在视图控制器中放置事件代码块的位置。
t40tm48m8#
右击选择TouchUp内侧的打开按钮功能进行拖动。
huus2vyu9#
要修复它,我必须将我的项目语言从SWIFT 2.3更新到SWIFT 3.0