HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何获取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.(如果小于5,那么没有视图控制器将是UIMoreNavigationController的子节点.)

但是,我想避免硬编码任何关于UITabBarController在列出moreNavigationController中剩余控制器之前将显示的视图控制器数量的假设. Apple可能会在未来改变这个数字.但我无法在UITabBarController或UINavigationController上找到任何API来访问这些子节点,而UIMoreNavigationController不是公共类,因此我不能依赖于该类上公开的任何方法.

解决方法

我还没有找到真正的API来完成这个.但是,可以在不基于检查UIUserInterfaceI@L_147_11@m并假设最多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(私有框架类)的子视图控制器?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。