我第一次使用Unwind Segue方法。我有多个视图控制器,如下图所示(其中一些显示当然)。在编辑配置文件中,我有一个完成按钮。点击后,我会触发一个触发展开segue的IBAction。
以下是导航栏中“完成”按钮的代码:
@IBAction func unwindToMainViews(sender: UIStoryboardSegue) {
//let sourceViewController = sender.sourceViewController
self.performSegueWithIdentifier("unwindToMainSegue", sender: self)
}
并在
中override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)
我正在执行以下操作,将数据从编辑配置文件传回主视图
if (segue.identifier == "unwindToMainSegue") {
// pass data to next view
let tabCtrl = segue.destinationViewController as! UITabBarController
let destinationVC = tabCtrl.viewControllers![0] as! HomeViewController
destinationVC.userObject = self.userObject;
}
当匹配segue标识符并执行代码(将userObject从此控制器传输到另一个控制器)时,它会触发错误:
无法将'app.EditProfileViewController'类型的值(0x100b99d80)转换为'UITabBarController'(0x104a1d030)。
如何修复此错误?我很惊讶,因为我正在向UITabBarController投掷,所以认为它应该工作。
答案 0 :(得分:2)
您不会在展开segue 中返回UITabBarController。您将返回触发原始segue的ViewController,或者返回触发原始segue的ViewController。
正如@jlehr在评论中所说:
放松segues不会返回任何东西;他们解雇任何推动和 在源视图和目标视图之间显示视图控制器 控制器。目的地是执行的地方 找到unwind方法,无论源视图控制器如何 出现了。
要展开触发原始segue的viewController,您需要在要返回的viewController中实现@IBAction func returnToHere(segue: UIStoryboardSegue)
函数。
然后,当您通过拖动到退出图标设置完成按钮时,从弹出窗口中选择returnToHere
。
要将数据传递回sourceViewController,请将展开segue 标识为“unwindToSource”,然后在要返回的viewController中覆盖prepareForSegue
:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "unwindToSource" {
let dvc = segue.destinationViewController as! SourceViewController
dvc.userObject = self.userObject
}
}