如何解除视图控制器链?
我有一套视图控制器VC1,VC2,VC3,VC4。 VC2有多个入口点,可以以模态方式呈现或推送到导航控制器上。如何解除视图控制器链?
目前我在VC1。在某些行动中,我以模态方式呈现VC2。 VC2中的一些后续操作将我带到VC3-> VC4。 VC4中有一个按钮可以让我回到VC1。
我该如何以简单的方式实现?一种方法是通过代表实现它。但是,我需要将它设置在路径上的每个视图控制器中吗?
我想没有必要设置任何delegates.I根据您的问题,并取得了演示我找到一个解决方案。
比方说,你有3个视图控制器模态打开。
A - 起始视图控制器
A - > VC1
VC1 - > VC2
VC2 - > VC3
刚上按钮抽头写这下面线。
self.presentingViewController?.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
P.S:使用presentingViewController财产 你有很多视图控制器。在我的情况下,我写了3次,因为我有模态 呈现3个视图控制器。
快速简单的解决方案。唯一的缺点是临时视图控制器可能会闪烁。 – Vitalii
使用展开segues(如果您使用故事板)!
在苹果文档中阅读它并在网上找到一些例子。你的场景对此非常完美。
@IBAction func backToVC1(segue: UIStoryboardSegue) {
}
然后在你最后的ViewController,从您的按钮退出图标控制拖动故事板的顶部:
在VC1的viewController(您想回到一个)将这个viewController并从弹出窗口中选择backToVC1。
这将解雇viewcontrollers整个堆栈,带你回到VC1
popToRootViewController/popToViewController已经在VC1实施。要调用它,VC4必须调用一些委托方法,如delegate.doneClicked()。那么我需要从VC1-> VC2-> VC3-> VC4传递这个委托对象吗? – gsrivast
是你的rootViewController的VC1吗?你可以使用你的AppDelegate来获取navigationController。使用'UIApplication sharedApplication] .delegate'你可以从任何类中检索你的AppDelegate实例。 –