【发布时间】:2015-03-04 04:35:40
【问题描述】:
我正在制作一个 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)。
但是我体验到 ViewWillAppear 和 ViewDidAppear 会在 UIViewController 上被触发,即使它们没有出现也会被解雇(例如,在示例中,当从 PageE 然后 ViewWillAppear 解雇回 PageA 时也被PageD、PageC、PageB 调用)。
这对我来说似乎不合逻辑。谁能解释为什么会这样?如果我以错误的方式处理这个问题,也许可以纠正我。
我正在使用 Xamarin.iOS。
苹果文档: 如果您连续呈现多个视图控制器,从而构建一个呈现视图控制器的堆栈,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式消失;任何中间视图控制器都简单地从堆栈中删除。最顶层的视图使用其模态转换样式被解除,这可能与堆栈中其他视图控制器使用的样式不同。
【问题讨论】:
-
使用 modal 有什么具体要求吗?我认为您应该使用导航控制器来获得此流程。模态不是用来导航的,它是弹出一些信息的东西。
-
@SharonNathaniel - 没有具体要求。但是我只是使用模态来避免删除导航栏等(它应该不可能向后导航)。实际上页面是不相关的。什么惯用语通常用于在不相关的页面之间导航,有过渡,但应该不能导航回来等。
-
您可以使用导航控制器,并在您不希望用户返回的特定视图控制器上隐藏返回按钮。当你想回到根视图控制器时,只需 popToRootViewController。
-
我也有这个问题。我的解决方法是使用标志来控制这种行为
标签: ios uiviewcontroller navigation xamarin