如何获得UIMoreListController(私人框架类)的子视图控制器?
我很好奇,如果有一个合法的API来获得作为UIMoreListController
孩子的视图控制器? (UIMoreListController是UIMoreNavigationController视图堆栈顶部的子元素,UIMoreNavigationController是UITabBarController
的moreNavigationController
属性指向的对象。
换句话说,如果我有一个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
一种方法是简单地从UITabBarController的viewControllers
属性中获取视图控制器,检查是否有多于5,并且如果多于5,则将所有视图控制器从索引5返回到N - 1
。(如果有less于5,那么视图控制器将不会是UIMoreNavigationController的子项。)
不过,我想避免在列出moreNavigationController
的其余控制器之前,对有关UITabBarController将显示的视图控制器数量的任何假设进行硬编码。 苹果可能会在未来改变这个数字。 但是我无法在UITabBarController或UINavigationController上find任何访问这些子项的API,而UIMoreNavigationController也不是公共类,因此我不能依赖该类上公开的任何方法。
我还没有find一个真正的API来完成这一点。 但是,可以在不进行基于UIUserInterfaceIdiom
检查的假设的情况下完成,并假定最多5个或8个选项卡。 这有点丑陋,很简单:
- 获取标签栏中的项目数量。 如果有这样一个标签栏项目,
UITabBarController.tabBar.items
将包含moreNavigationController
的标签栏项目。 - 统计UITabBarController中视图控制器的数量。 如果UITabBarController中有更多的视图控制器比标签栏项目,则最后一个标签栏项目代表
moreNavigationController
。 - 因此,将标签栏项目的数量减1(以解决
moreNavigationController
),这是UITabBarController.viewControllers
moreNavigationController
的第一个子项的moreNavigationController
。
或者,在代码中:
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];
- 为什么一个子视图不会留在父框架?
- Map上的多个位置(使用MKMapItem和CLGeocoder)
- 在iPhone上创build一个popover?
- iOS(Iphone / iPad / iPod Touch)设备有多less内存?
- 如何在iphone中以编程方式创buildPLIST文件
- UISearchDisplayController – 如何预载searchResultTableView
- 在beginEditing中selectUISearchBar中的所有文本?
- 在iPhone SDK上等待CLLocationManagerDelegate的didUpdateToLocation方法时,UITableView不会填充
- UIImagePickerController错误