解雇模态ViewControllers

时间:2014-09-07 20:55:27

标签: ios objective-c uiviewcontroller segue modalviewcontroller

我有一系列嵌套的导航控制器(因为我希望导航栏位于顶部,我无法在不使用导航控制器的情况下使该条看起来正确)。

所以基本上它看起来像这样: -NavigationController-VC1 - >(模态) - NavigationController-VC2 - >(模态)...等

当我在摘要ViewController时,最后一个 - 我想要一个按钮将用户带回到最根的ViewController。我怎么能这样做?

我已尝试过popToRootViewControllerAnimated,但由于我有一系列导航控制器(更好的解决方案??),因此无法正常工作

谢谢!

修改

现在导航:

导航控制器 - > VC1 - (模态) - > VC2 - (模态) - > VC3 ......等等

4 个答案:

答案 0 :(得分:0)

popToRootViewController:Animated只会返回导航控制器视图控制器数组的[0]。换句话说,第一个导航控制器的根将始终为VC1,第二个导航控制器的根将始终转到VC2。您应该重新考虑应用程序的结构,因为您不应该将一个导航控制器推送到另一个 - 这没有意义。这是你可以做的:

Navigation Controller -> VC1 -> (push segue) -> VC2 -> (push segue) -> VC3

这样popToRootViewController:Animated将返回VC1。

我使用多个导航控制器的唯一原因是,如果我有某种表格,其中包含以下选项:

---
A     Navigation Controller -> VCA1 -> (push segue) -> VCA2 -> (push segue) -> VCA3
---
B     Navigation Controller -> VCB1 -> (push segue) -> VCB2 -> (push segue) -> VCB3
---
C     Navigation Controller -> VCC1 -> (push segue) -> VCC2 -> (push segue) -> VCC3
---

即使在这种情况下,根视图控制器也将始终为VCA1,VCB1或VCC1。

希望这有帮助。

如果您发布您想要完成的内容,这也会有所帮助,以便我们更好地理解您的问题。

答案 1 :(得分:0)

通过编写第一行,您可以获得所有视图控制器的索引,从第二行开始,您将到达目的地。

NSArray * array = [self.navigationController viewControllers];

[self.navigationController popToViewController:[array objectAtIndex:2] animated:YES];

答案 2 :(得分:0)

您没有说明您是否使用故事板,但是如果您正在尝试放松细分。 What are Unwind segues for and how do you use them?

使用展开segue可以让您回到需要进入层次结构的位置。

答案 3 :(得分:0)

如果您对所有视图控制器使用相同的导航控制器,则此行适用于您。

[self.navigationController popToRootViewControllerAnimated:YES];

但在您的情况下,您正在展示模型视图控制器。在这种情况下,您需要先解除第一个模型视图控制器,然后才能显示其他模型。