我正在制作一个iOS应用程序,我想在其中呈现这样的页面流:
基本上我想实现的是拥有这样的页面流:
PageA
PageB
PageC
PageD, dismiss back to:
PageC
PageD
PageE, dismiss back to:
PageA (starting point, start over again)
我使用ShowViewcontroller
来呈现页面(模态),使用DismissViewcontroller
来消除页面。
根据苹果的文档,如果我在堆栈的早期解雇VC,那么所有后续的UIViewCOntroller
也会被解雇(苹果文档)。
然而,我的经验是,ViewWillAppear
和ViewDidAppear
在UIViewController
上被激发,即使它们没有出现,也会被激发(例如,在从PageE
激发回PageA
的示例中,ViewWillAppear
也在PageD
、PageC
、PageB
上被调用)。
这在我看来不符合逻辑。有人能解释为什么会发生这种情况吗?如果我处理这个问题的方式不对,也许可以纠正我。
我正在使用Xamarin.iOS.
苹果文档:如果连续呈现多个视图控制器,从而构建一个呈现的视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法将解除其直接子视图控制器和堆栈上该子视图控制器之上的所有视图控制器。当这种情况发生时,只有最上面的视图才会以动画的方式被忽略;任何中间视图控制器都被简单地从堆栈中移除。最上面的视图使用其模式转换样式来消除,该样式可能与堆栈中较低的其他视图控制器使用的样式不同。
ViewControllers使用堆栈。每当一个新的ViewController(任何类型)被添加到堆栈中时,您就会失去对ViewController的越来越多的控制(尤其是在对ViewController使用模态时)。因此,假设您的堆栈中有5个ViewController(根据您的示例,A、B、C、D、E),并假设它们是按照所述顺序创建的,为了从ViewController E返回到ViewController A,您必须遍历整个堆栈。这意味着,您所使用的每个ViewController都需要首先显示,以便消除is(因为您已经显示了ViewController E,所以这里不会发生这种情况)。
我希望这对你有帮助。祝你好运
爱和问候,比约恩