无法将按钮操作拖动到 Xcode 8 中的现有功能
Posted
技术标签:
【中文标题】无法将按钮操作拖动到 Xcode 8 中的现有功能【英文标题】:Can't drag button action to existing function in Xcode 8 【发布时间】:2017-01-29 02:03:00 【问题描述】:我对 Xcode 8 有一个奇怪的问题。当我尝试按 ctrl + 拖动按钮到现有功能时,我不能只创建新的出口或动作。更奇怪的是,即使我通过 ctrl + 拖动创建动作,我也无法将事件与我用于创建动作的按钮连接起来。 IB图标也是空白的,就像动作和按钮之间没有联系一样,但是实时点击运行动作。 另一方面,当我尝试将动作连接到从 swift 到情节提要的按钮时,我可以(@IB 图标变为“已满”),但是在实时单击无法识别的选择器 myActionWithSender 时出现异常
【问题讨论】:
【参考方案1】:在我的 Xcode 版本中,IBAction 是使用“Any”参数自动创建的,而不是“AnyObject”。使用 UIButton 显式创建 IBAction 对我有用。
【讨论】:
这也是我的解决方案。您还可以手动将 Any 更改为 AnyObject,它是现有代码,它可以像宣传的那样工作。为什么 Xcode 默认为 Any?感谢您的解决方案!【参考方案2】:在我的情况下,您需要将 Any 更改为 UIButton。需要具体说明来自 UIButton 的操作。
@IBAction func buttonClicked(_ sender: UIButton)
【讨论】:
【参考方案3】:点击 UIButton,然后从 Utilities 区域转到“Connections Inspector”。
点击事件旁边的空圆圈,将线条拖入func体中。
【讨论】:
【参考方案4】:在选择touchup里面用打开按钮功能右键点击拖动..你应该试试这个..
【讨论】:
【参考方案5】:在您的 .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 不需要标签。斯威夫特 3 可以。因此,正如 Jaroslaw 指出的那样,从 2.3 升级到 3.0 也将解决这个问题。但是,如果您的项目停留在 2.3 上,只需添加标签似乎就可以解决问题。
【讨论】:
奇怪的观察:如果我使用下划线'_',我可以从 IB 拖动到代码中的函数名称,它会突出显示整个函数 - 并建立连接。但是,如果我使用“z”或任何其他字母数字标签,则无法从 IB 拖动到函数名称。很奇怪。【参考方案6】:将发件人从 Any 更改为 AnyObject 对我有用
【讨论】:
【参考方案7】:即使在 Swift 3 中,您也希望将 @IBAction
的参数从 (_ sender: Any)
更改为 (_ sender: UIButton)
或 (_ sender: AnyObject)
,但要手动更改。
它可能会起作用。
【讨论】:
【参考方案8】:就我而言,我打开了一个类似的故事板。一旦我关闭它然后 - 单击按钮一次以查看其周围的块以进行对齐。 - 然后右键单击并将其拖动到 ViewController。 - 最后,在 ViewController 中单击/点击要放置事件代码块的位置。
【讨论】:
【参考方案9】:要修复它,我必须将我的项目语言从 Swift 2.3 更新到 Swift 3.0
【讨论】:
以上是关于无法将按钮操作拖动到 Xcode 8 中的现有功能的主要内容,如果未能解决你的问题,请参考以下文章
xcode / storyboard:无法将栏按钮拖动到顶部的工具栏
Xcode 8.1 无法将 iPad 故事板添加到具有现有 iPhone 故事板的通用应用程序