我有四个视图控制器 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)
我面临的问题是, 正在调用视图控制器 B 和视图控制器 C 的viewDidAppear
。
我不知道为什么会这样?回到初始UIViewController
的正确方法是什么.
您的视图控制器 A、B、C 和 D 位于实现后进先出的堆栈数据结构中。这意味着要通过关闭 ViewController 来访问 ViewController A,它将按此顺序弹出 ViewControllers D、C、B。在这种情况下,从堆栈中弹出的 ViewControllers C 和 B 将在一瞬间成为最顶层的 ViewController,这将触发 viewWillAppear(( 和 viewWillDissapear(( 函数。苹果文档:
在堆栈中较低的视图控制器上调用此方法将关闭其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。
相反,如果你有一个导航控制器并且不想出现C和B,你应该做的是从当前显示的viewController (D(弹出ToRootViewController((,这将弹出当前,然后释放C和B,然后显示A。
据我所知,一次关闭 4 个控制器是不可能的,但有一个棘手的方法——
创建一个从视图控制器D到视图控制器 A 的 segue,将其称为ForceSegue
,然后您应该在A控制器上有一些东西来执行此操作,如果它是一个操作,请粘贴以下内容。目标-c
[self performSegueWithIdentifier:@"ForceSegue" sender:self];
斯威夫特 3
performSegue(withIdentifier: "ForceSegue", sender: self)
只是一个棘手的方法, 希望这有帮助!