如何确定ViewController是否是顶级?

时间:2011-11-22 23:14:49

标签: iphone objective-c ios

我有一个标签栏驱动的应用程序。

该应用程序有一些视图控制器以通常的方式相互堆叠。 这些视图控制器中的一些可能是顶级的 - 意味着直接从标签栏控制器实例化。那些导航栏中没有“后退”按钮。

其中一些可以在调用堆栈中的许多点调用。这意味着它们可以从其他视图控制器调用,而不是直接从标签栏调用。

我正在寻找一种智能方法来以编程方式确定当前视图控制器当前是否在其导航栏中有“后退”按钮。 (如果没有,那么我想在那个地方显示一些其他的酒吧项目。)

任何提示都表示赞赏。 :)

4 个答案:

答案 0 :(得分:5)

嗯......根据您的描述,我可以理解您在每个选项卡中都有一个UITabBarController视图控制器列表,每个视图控制器都是一个导航控制器,这进一步导致了新的视图。您有兴趣查找特定视图是第一个视图还是第二个视图,等等。

有趣的是,有一种方法可以做到这一点。导航控制器基本上是一个viewController数组,其视图添加到navigationController的索引中。第一个视图将位于索引0中。如果执行pushViewControllernewViewController将放在索引1处。

只需检查该特定视图的self.navigationController的索引计数。如果它大于1,您可以确定它不是初始视图。

您还可以检查backBarButtonItem属性,但是可能不再需要它。 viewControllers数组计数应该这样做。

答案 1 :(得分:3)

您可以向视图控制器询问它是-navigationController,向导航控制器询问其-viewControllers堆栈,并查看该堆栈的-count是什么。

当前显示的视图控制器是堆栈中的“最后”项(索引 n -1)。 “后退”视图控制器倒数第二( n -2 - n 是堆栈的计数)。因此,如果堆栈的计数为1,则表示您已达到顶部。堆栈中没有任何内容可以返回,也不会显示后退按钮。

答案 2 :(得分:2)

考虑在导航控制器的viewControllers数组属性中获取视图控制器的索引。如果它为零,则视图控制器是顶部控制器(没有后退按钮)。

答案 3 :(得分:0)

UINavigationController有topViewController和visibleViewController属性可以帮助你。如果您只是想知道是否有后退按钮,您可以检查UINavigationItem的backBarButtonItem属性,看看它是否为非零且非隐藏。