如何弹出回到不同导航控制器中的视图?
How to pop back to a view in a different navigation controller?
我想在我的 Swift 应用程序中创建以下用户流:
- 用户点击按钮
- 弹出一个带有选项的模态视图。用户选择一个选项。
- 出现带有另一个选项的第二个视图(使用 "show" 转换,因此用户可以按 < 返回 更改选项 #1)。用户选择第二个选项。
- 第二个模态视图返回到原始视图(具有按钮)。
为此,我创建了以下结构:
--> 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 的引用。不幸的是,segue 没有发生;第二个模态视图保留在屏幕上,但我打印了 "Trying to segue" 消息。
我是否尝试以正确的方式实施此用户流程?如果是这样,为什么我不能弹出到另一个导航控制器中的根视图有什么建议吗?
如果您正在使用故事板,则可以使用展开转场来执行此操作。
在 VC1 中实现一个 @IBAction
方法,它以一个 UIStoryboardSegue
作为参数:
@IBAction func unwindToVC1(sender: UIStoryboardSegue) {
}
然后从 VC3 的 Prototype 单元格中按住 control 拖动到视图控制器的 Exit 图标,select Selection Segue: unwindToVC1:
就可以了。
您也可以使用代码实现类似的结果。
像这样在 VC3 中实现 didSelectRowAtIndexPath
:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
navigationController!.dismissViewControllerAnimated(true, completion: nil)
}
我想在我的 Swift 应用程序中创建以下用户流:
- 用户点击按钮
- 弹出一个带有选项的模态视图。用户选择一个选项。
- 出现带有另一个选项的第二个视图(使用 "show" 转换,因此用户可以按 < 返回 更改选项 #1)。用户选择第二个选项。
- 第二个模态视图返回到原始视图(具有按钮)。
为此,我创建了以下结构:
--> 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 的引用。不幸的是,segue 没有发生;第二个模态视图保留在屏幕上,但我打印了 "Trying to segue" 消息。
我是否尝试以正确的方式实施此用户流程?如果是这样,为什么我不能弹出到另一个导航控制器中的根视图有什么建议吗?
如果您正在使用故事板,则可以使用展开转场来执行此操作。
在 VC1 中实现一个 @IBAction
方法,它以一个 UIStoryboardSegue
作为参数:
@IBAction func unwindToVC1(sender: UIStoryboardSegue) {
}
然后从 VC3 的 Prototype 单元格中按住 control 拖动到视图控制器的 Exit 图标,select Selection Segue: unwindToVC1:
就可以了。
您也可以使用代码实现类似的结果。
像这样在 VC3 中实现 didSelectRowAtIndexPath
:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
navigationController!.dismissViewControllerAnimated(true, completion: nil)
}