我很好奇是否有合法的API来获取UIMoreListController
的子视图控制器? (UIMoreListController是UIMoreNavigationController视图堆栈顶部的子节点.UIMoreNavigationController是moreNavigationController
的{{1}}属性指向的对象。)
换句话说,如果我有一个UITabBarController并且我在其上设置了六个视图控制器的数组,那么视图层次结构实际上看起来就像这样(它实际上是视图的层次结构,而不是视图控制器,但使用这些标识符会产生更多义):
UITabBarController
这样做的一种方法是简单地从UITabBarController的+ UITabBarController <-- has five tabs
|--- view controller <-- these are my own view controllers
|--- view controller
|--- view controller
|--- view controller
|--+ UIMoreNavigationController <-- root view controller of fifth tab
|--+ UIMoreListController <-- table-based view shown on fifth tab
|--- view controller <-- these are my own view controllers
|--- view controller
属性中获取视图控制器,检查是否有超过5个,并将所有视图控制器从索引5返回到viewControllers
如果有超过5个。(如果小于5,则没有视图控制器将是UIMoreNavigationController的子节点。)
但是,我想避免硬编码任何有关UITabBarController在列出N - 1
中剩余控制器之前将显示的视图控制器数量的假设。 Apple可能会在未来改变这个数字。但我无法在UITabBarController或UINavigationController上找到任何API来访问这些子节点,而UIMoreNavigationController不是公共类,因此我不能依赖于该类上公开的任何方法。
答案 0 :(得分:3)
我还没有找到真正的API来完成这个。但是,可以在不基于检查UIUserInterfaceIdiom
并假设最多5或8个选项卡的假设的情况下完成。这有点丑陋,有点简单:
UITabBarController.tabBar.items
将包含moreNavigationController
的标签栏项目。moreNavigationController
。moreNavigationController
),这是moreNavigationController
中UITabBarController.viewControllers
的第一个孩子的索引。 或者,在代码中:
NSUInteger tabCount = [tabBarController.tabBar.items count];
NSUInteger vcCount = [tabBarController.viewControllers count];
NSUInteger idx = (vcCount > tabCount) ? tabCount - 1 : 0;
NSIndexSet *is = [NSIndexSet indexSetWithRange:NSMakeRange(idx, vcCount - idx)];
NSArray *moreControllers = [tabBarController.viewControllers objectsAtIndexes:is];