2011-06-13 60 views
3

因此,如果我在屏幕上,我可以使用pushViewController导航到下一个导航屏幕,然后我只需进入下一个屏幕,并使用backButton到上一个屏幕。导航控制器和导航中前一个屏幕的标题?

是否显示上一个屏幕(后退按钮将我们推向的屏幕)...是否有名称? (像previousViewController os类似的东西)??

我背后这个问题的目标:

如果我有5个画面(1,2,3,4,5分别)......可以说,我从1导航 - > 3,而在另一种情况下,我从2 - > 3导航。我想说,如果“PreviousViewController是1”,然后从3导航到4(1 - > 3 - > 4),否则,如果previousViewController是2,我想导航到3到5(2→3→5)...

我该如何做到这一点?

谢谢!

p.s. 我知道我也可以尝试一些合理的和合乎逻辑的另一种方法,并相应地pushViewController。但是如果有一个解决方案来检查previousViewController,它会让我的任务变得轻松,并且会是一次很好的学习体验。

回答

8

实际上,您可以使用UINavigationControllerviewControllers属性来做到这一点。这就是Apple says一下:

根视图控制器是在索引0处的阵列中,所述后视图控制器是在索引n-2,并且顶控制器是在索引n-1,其中n是数组中的项目数量。

你的“上一个控制器”是苹果公司定义的“后视图控制器”,对应于指数n-2:

NSUInteger arraySize = [navController.viewControllers count]; 
UIViewController* prevController = [navController.viewControllers objectAtIndex:count-2]; 
+0

太棒了。所以我只是检查数组中的值并据此作出我的决定?虽然它看起来很简单,但我想知道是否有任何示例代码,以便我不会以错误结束。 – Legolas 2011-06-13 19:42:44

+0

Apple文档非常清晰,所以您应该安全。无论如何,我添加了一个小样本。 – sergio 2011-06-13 19:53:18

+0

美妙的男人。事情正在起作用。最后一个问题。我可以检查这样的东西吗?如果(prevController)是@class DateInfoViewController的成员,那么执行此操作;别这样做....? – Legolas 2011-06-13 20:19:18

0

不,没有先前的控制器。 UINavigationController是作为一个堆栈实现的,所以你不断推动视图控制器,那些可以自己弹出堆栈。如果你想查看所有视图控制器的堆栈,那么UINavigationController具有名为“viewControllers”的属性,它被实现为NSArray。

+0

让我把我的目标背后的问题,这样你可以让我知道实施。 – Legolas 2011-06-13 19:25:34