如何确定一个ViewController是否是最高级别?

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

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

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

我正在寻找一个聪明的方式来确定当前视图控制器目前是否有一个“后退”button在其导航栏或不。 (如果没有,那么我想在那个地方显示一些其他的酒吧项目。)

任何暗示是赞赏。 🙂

嗯…从你所描述的,我可以理解你有一个UITabBarController在每个选项卡中有一个视图控制器的列表,每个视图控制器是一个导航控制器,进一步导致新的意见。 而且你有兴趣找出一个特定的视图是第一个视图还是第二个视图,等等。

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

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

你也可以检查backBarButtonItem属性,但是可能不需要。 viewControllers数组应该这样做。

你可以问你的视图控制器它的-navigationController ,请求导航控制器的-viewControllers堆栈,并查看该堆栈的数量是多less。

当前显示的视图控制器是堆栈中的“最后”项目(索引n -1)。 “倒退”视图控制器倒数第二( n -2 – n是堆栈的计数)。 所以如果堆栈的数量是1,那意味着你已经达到了最高。 堆栈中没有任何东西可以返回,也不会显示返回button。

考虑获取导航控制器的viewControllers数组属性中的视图控制器的索引。 如果它是零,那么视图控制器是最上面的控制器(没有后退button)。

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