ViewWillAppear&解雇ViewController时ViewDidAppear触发

时间:2015-03-04 04:35:41

标签: ios uiviewcontroller navigation xamarin

我正在创建一个iOS应用程序,我想要呈现这样的页面流:

基本上我想要实现的是拥有这个页面流:

PageA
PageB
PageC
PageD, dismiss back to:
PageC
PageD
PageE, dismiss back to:
PageA (starting point, start over again)

我使用ShowViewcontroller来展示页面(模态)和DismissViewcontroller来解散。

根据Apple的文档,如果我在堆栈的早期解雇VC,则所有后续的UIViewCOntroller也会被解雇(Apple doc)。

但是我遇到ViewWillAppearViewDidAppear被解雇的UIViewController即使没有出现也被解雇(例如在解雇回PageA时的示例中来自PageE然后ViewWillAppear会在PageDPageCPageB上调用。

这对我来说似乎不合逻辑。任何人都可以解释为什么会这样吗?如果我以错误的方式接近这一点,或许纠正我。

我正在使用Xamarin.iOS。

Apple doc: 如果连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图上方的所有视图控制器。发生这种情况时,只有最顶层的视图以动画方式被删除;任何中间视图控制器都可以从堆栈中删除。最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同。

1 个答案:

答案 0 :(得分:1)

ViewControllers使用堆栈。每当将新的ViewController(任何类型)添加到堆栈中时,您将失去对ViewControllers的越来越多的控制(特别是在为ViewControllers使用模态时)。所以,假设您的堆栈中有5个ViewControllers(A,B,C,D,E,根据您的示例),并假设它们是按照所述顺序创建的,以便从ViewController E返回到ViewController A,我必须经历整个堆栈。这意味着你的方式中的每个ViewController都需要首先显示,以便解雇(因为你已经显示了ViewController E,这里不会发生这种情况)。

我希望这会对你有所帮助。祝你好运!

爱和问候, 的Björn

相关问题