2016-07-31 63 views
1

我想在我的斯威夫特应用程序来创建以下用户流量:如何回弹到不同导航控制器中的视图?

  1. 用户点击一个按钮
  2. 模态的视图弹出了一个选择。用户选择一个选项。
  3. 第二个视图以另一种选择出现(使用“显示”转换,因此用户可以按<  返回以更改选择#1)。用户选择第二选择。
  4. 第二个模态视图回退到原始视图(其中有按钮)。通过传递到VC1参考一路走过来VC3,然后调用

    --> NC1 --> VC1 --modal-> NC2 --> VC2 --show-> VC3 (NC = UINavigationController, 
          ^        |  VC = UIViewController) 
          |         | 
          ----Segue I'm trying to achieve----- 
    

    我一直在努力,一直流行回VC1:

要做到这一点,我创建了以下结构VC3中的以下代码:

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的引用。不幸的是,赛格不会发生。第二个模态视图停留在屏幕上,但我得到了“尝试继续”消息。

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

+0

有包含在你驾驶的所有控制器的属性称为viewControllers,删除那些你想跳过 –

回答

3

如果您正在使用故事板,则可以使用展开的渐变来完成此操作。

在VC1实施@IBAction方法,它接受一个UIStoryboardSegue作为参数:

@IBAction func unwindToVC1(sender: UIStoryboardSegue) { 

} 

然后从VC3控制拖动到视图控制器的退出图标的原型细胞,选择Selection Segue: unwindToVC1:,你是好去。

enter image description here

可以实现使用代码也是类似的结果。
在VC3实现didSelectRowAtIndexPath这样的:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    navigationController!.dismissViewControllerAnimated(true, completion: nil) 
} 
在您的导航控制器
+1

感谢尤,我用'dismissViewControllerAnimated '正如你在VC3中所建议的那样,它完成了这项工作。 –

相关问题