如何弹回到不同导航控制器中的视图?

时间:2016-07-31 07:17:26

标签: ios swift unwind-segue

我想在Swift应用程序中创建以下用户流:

  1. 用户点击按钮
  2. 模态视图会弹出一个选项。用户选择一个选项。
  3. 第二个视图显示另一个选择(使用“显示”转换,因此用户可以按< Back 来更改选项#1)。用户选择第二个选项。
  4. 第二个模态视图将回到原始视图(具有按钮)。
  5. 为此,我创建了以下结构:

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        // Perform Segue
        print("Trying to segue")
        rootController!.navigationController!.popToRootViewControllerAnimated(true)
    
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    } 
    

    我试图通过将VC1的引用一直传递到VC3,然后在VC3中调用以下代码,一直弹回VC1:

    rootController

    其中{{1}}是对VC1的引用。不幸的是,segue没有发生;第二个模态视图保留在屏幕上,但我打印出“试图消失”消息。

    我是否正在尝试以正确的方式实施此用户流程?如果是这样,为什么我不能弹出到另一个导航控制器的根视图的任何建议?

1 个答案:

答案 0 :(得分:3)

如果您使用的是故事板,则可以使用展开segue来执行此操作。

在VC1中实现@IBAction方法,该方法将UIStoryboardSegue作为参数:

@IBAction func unwindToVC1(sender: UIStoryboardSegue) {

}

然后从VC3控件的Prototype单元格拖动到视图控制器的Exit图标,选择Selection Segue: unwindToVC1:,你就可以了。

enter image description here

您也可以使用代码获得类似的结果 在VC3中实现didSelectRowAtIndexPath,如下所示:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    navigationController!.dismissViewControllerAnimated(true, completion: nil)
}