换句话说,如果我有一个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.(如果小于5,那么没有视图控制器将是UIMoreNavigationController的子节点.)
但是,我想避免硬编码任何关于UITabbarController在列出moreNavigationController中剩余控制器之前将显示的视图控制器数量的假设. Apple可能会在未来改变这个数字.但我无法在UITabbarController或UINavigationController上找到任何API来访问这些子节点,而UIMoreNavigationController不是公共类,因此我不能依赖于该类上公开的任何方法.
解决方法 我还没有找到真正的API来完成这个.但是,可以在不基于检查UIUserInterfaceIdiom并假设最多5或8个选项卡进行假设的情况下完成.它有点丑陋,有点简单:>获取选项卡栏中的项目数.如果有这样的标签栏项,UITabbarController.tabbar.items将包含moreNavigationController的标签栏项.
>计算UITabbarController中的视图控制器数量.如果UITabbarController中的视图控制器多于标签栏项,则最后一个标签栏项表示moreNavigationController.
>因此,将标签栏项目数量减少一个(以考虑moreNavigationController),这是UITabbarController.vIEwControllers中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];总结
以上是内存溢出为你收集整理的ios – 如何获取UIMoreListController(私有框架类)的子视图控制器?全部内容,希望文章能够帮你解决ios – 如何获取UIMoreListController(私有框架类)的子视图控制器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)