如何在不同的导航控制器中popup视图?

我想在Swift应用程序中创build以下用户stream:

  1. 用户点击一个button
  2. 一个模式视图popup一个select。 用户select一个select。
  3. 第二个视图出现另一个select(使用“显示”转换,所以用户可以按<返回以改变select#1)。 用户select第二select。
  4. 第二个模态视图回到原来的视图(有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) }