如何在另一个控制器下调出模态视图控制器?

时间:2011-11-23 15:18:22

标签: iphone ios modalviewcontroller

我有导航问题。我想创建以下导航结构:

从屏幕A开始。当按下按钮时,屏幕B动画为模态视图控制器,覆盖A.在第一个场景中,当屏幕B被解除时,它向下滑动显示屏幕C,这是一个新的模态视图控制器现在覆盖屏幕A.当C被解除时,它向下滑动以再次显示屏幕A.在屏幕B被解除的第二种情况下,它显示覆盖屏幕A的模态屏幕D.

我最大的问题是我无法找到一种方法在它被解雇之前在B后面显示模型对话框C或D,并且直到B中发生某些事情,我不知道我是否应该创建C或D,所以我不能从B的父B开始。另外,即使我能做到这一点,我也无法像我在问题陈述中所描述的那样使动画工作。

任何想法如何让这个场景有效?

3 个答案:

答案 0 :(得分:1)

策略一:如果它适合您的应用,请考虑使用导航控制器而不是模态。 NSNavigationController有一个方便的方法:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

允许您重新组织视图控制器堆栈,有或没有动画。因此,可能更改堆栈以在没有动画的情况下将新VC插入到顶部(当前的一个)之下。然后你的完成按钮(或类似的)弹出顶部VC以显示下面的新VC。

策略二:这是一个更具实验性的,可能无法正常工作,但您可能会在“及时”视图控制器插入中侥幸逃脱。例如,对于VC A,实现viewWillAppear.此方法通常在UI被动解除之前被调用,并且可能是插入新VC的好地方(即没有动画的show modal) )因为上面VC的解雇动画才刚刚开始。正如我所说,你的里程可能会有所不同。

答案 1 :(得分:0)

请参阅the Apple docs

“任何视图控制器对象都可以模态地呈现任何其他单个视图控制器。即使对于本身以模态方式呈现的视图控制器也是如此。换句话说,您可以根据需要将模态视图控制器链接在一起,呈现新的模态视图控制器根据需要在其他模态视图控制器的顶部。“

所以你可以模态地呈现NavigationControllers。

但是,您无法轻松切换导航控制器的根视图控制器(一种可能性is here)。

另一种方法是以模态方式呈现NavigationController,但是从一开始就在其上推送两个ViewControllers,以便用户看到第二个(屏幕B),然后返回到第一个(屏幕C),然后解除模态NavigationController返回到屏幕A。

答案 2 :(得分:0)

使用标准模态视图控制器方案似乎无法做到这一点。我能找到的唯一解决方案是将其转换为单个视图控制器并使用自定义动画。由于这不是特别需要,我们最终改变了导航结构。