如何在不同的导航控制器中popup视图?
我想在Swift应用程序中创build以下用户stream:
- 用户点击一个button
- 一个模式视图popup一个select。 用户select一个select。
- 第二个视图出现另一个select(使用“显示”转换,所以用户可以按<返回以改变select#1)。 用户select第二select。
- 第二个模态视图回到原来的视图(有button)。
为此,我创build了以下结构:
--> NC1 --> VC1 --modal-> NC2 --> VC2 --show-> VC3 (NC = UINavigationController, ^ | VC = UIViewController) | | ----Segue I'm trying to achieve-----
我尝试通过将VC1的引用传递给VC3,然后在VC3中调用以下代码,一路回到VC1:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { // Perform Segue print("Trying to segue") rootController!.navigationController!.popToRootViewControllerAnimated(true) tableView.deselectRowAtIndexPath(indexPath, animated: true) }
其中rootController
是对VC1的引用。 不幸的是,赛格不会发生。 第二个模态视图留在屏幕上,但是我得到了“尝试继续”消息打印。
我是否试图以正确的方式实现这个用户stream? 如果是这样,任何build议,为什么我不能popup到另一个导航控制器的根视图?
如果你正在使用故事板,你可以使用unwind segue来做到这一点。
在VC1中实现一个@IBAction
方法,它将UIStoryboardSegue
作为参数:
@IBAction func unwindToVC1(sender: UIStoryboardSegue) { }
然后从VC3控件的Prototype单元格拖动到视图控制器的Exit图标,selectSelection Segue: unwindToVC1:
然后就可以了。
您也可以使用代码来获得类似的结果。
像这样在VC3中实现didSelectRowAtIndexPath
:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { navigationController!.dismissViewControllerAnimated(true, completion: nil) }