我是第一次使用放卷段方法。我有多个视图控制器,如下图所示(当然,其中一些显示了)。在编辑配置文件中,我有一个“完成”按钮。一旦点击,我就会触发一个IBAction,它会触发一个展开segue。
下面是导航栏中“完成”按钮的代码:
@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)。
如何修正这个错误?我很惊讶,因为我正在铸造Uitabarcontroller,所以认为它应该工作。
最佳答案
你不能在一段时间内回到UITabBarController。返回触发原始segue的ViewController,或者返回其祖先的ViewController。
正如@jlehr在评论中所述:
放松的间隔不会恢复到任何状态;它们会消除任何被推和
在源视图和目标视图之间显示视图控制器
控制器。目的地是执行
无论源代码视图控制器如何
出现了。
要释放到触发原始segue的viewController,需要在要返回的viewController中实现@IBAction func returnToHere(segue: UIStoryboardSegue)
函数。
然后,通过拖动到退出图标设置您的“完成”按钮,从弹出窗口中选择returnToHere
。
要将数据传递回sourceViewController,请为展开段提供一个标识符,例如“unwindToSource”,然后覆盖要从中返回的viewController中的prepareForSegue
:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "unwindToSource" {
let dvc = segue.destinationViewController as! SourceViewController
dvc.userObject = self.userObject
}
}