swift 3 prepare(for segue:) 功能坏了? [复制]
Posted
技术标签:
【中文标题】swift 3 prepare(for segue:) 功能坏了? [复制]【英文标题】:swift 3 prepare(for segue: ) function broken? [duplicate] 【发布时间】:2016-09-19 00:19:15 【问题描述】:由于某些奇怪的原因,使用 swift 3,prepare(for segue:
方法拒绝确认 segue 标识符。我将以下 IBAction 连接到 UI 上的几个按钮:
@IBAction func goToImagesPicker(_ sender: AnyObject)
performSegue(withIdentifier: "showImagePicker", sender: sender)
@IBAction func goToNamePicker(_ sender: AnyObject)
performSegue(withIdentifier: "showNamePicker", sender: sender)
但是在我的 prepare(for segue:
方法中,它不能识别不同的 segue 标识符,我知道是因为我的控制台没有记录我分配给每个标识符的消息:
func prepare(for segue: UIStoryboardSegue, sender: AnyObject?)
if segue.identifier == "showImagePicker"
print("This is the Image Picker")
if segue.identifier == "showNamePicker"
print("This is the Name Picker")
有什么建议吗?还是这只是一个错误?
【问题讨论】:
替换为以下代码覆盖 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) print("test"); // 使用 segue.destinationViewController 获取新的视图控制器。 // 将选中的对象传递给新的视图控制器。 【参考方案1】:您的方法根本没有被调用,因为您的签名错误。它在 Xcode 8 beta 6 中被更改为:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
注意sender
的类型是Any?
而不是AnyObject?
。升级 Xcode 后你应该遇到一个错误,它告诉你你的方法没有覆盖其超类中的任何方法,这应该在你删除 override
之前提示你。
【讨论】:
这似乎是解决方案,但是,我彻底阅读了文档,我从未看到发件人对象的语法发生变化......所以我只是在不知不觉中删除了覆盖。不过,无论如何,谢谢! 截至今天,我得到一个没有覆盖但没有调用覆盖的错误以上是关于swift 3 prepare(for segue:) 功能坏了? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4:在 viewDidLoad 之后调用 prepare(for segue:)
iOS 和 Swift:可以强制解开 tableView.indexPath?
如何在准备中的 switch 语句中使用可选绑定(segue :)
如果 segue.identifier == "showChildFiles" 当 segue 标识符看起来正确时,Swift 3 准备 segue 不通过