我有四个视图控制器A、B、C和D
我从A到B再到C到D

 let newViewContoller: B = self.storyboard?.instantiateViewControllerWithIdentifier("B") as! B
 self.presentViewController(newViewContoller, animated: true, completion:nil)

从D回到A
我用的是
self.view.window!.rootViewController?.dismissViewControllerAnimated(true, completion: nil)

我面临的问题是,
正在调用viewController B和viewController C的viewDidAppear
我不知道为什么会这样?什么是回到初始值的正确方法。

最佳答案

视图控制器A、B、C和D处于堆栈数据结构中,实现后进先出。这意味着要通过解除ViewControllers来访问ViewController A,它将按此顺序弹出ViewController D、C、B。在这种情况下,从堆栈中弹出的ViewController C和B将在一瞬间成为最上面的ViewController,这将触发viewWillAppear()和viewWillDissapear()函数。苹果文档:
在堆栈中较低的视图控制器上调用此方法将解除其直接子视图控制器和堆栈中该子视图控制器之上的所有视图控制器。
相反,如果您有一个导航控制器,并且不想让C和B出现,您应该做的是从当前显示的viewController(D)中popToRootViewController(),它将弹出当前,然后释放C和B,然后显示a。

关于ios - 如何回到rootviewcontroller,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45819760/

10-12 07:34