ios – 如何获取UIMoreListController(私有框架类)的子视图控制器?

ios – 如何获取UIMoreListController(私有框架类)的子视图控制器?,第1张

概述我很好奇是否有合法的API来获取作为UIMoreListController的子视图的视图控制器? (UIMoreListController是UIMoreNavigationController视图堆栈顶部的子项.UIMoreNavigationController是UITabBarController的moreNavigationController属性指向的对象.) 换句话说,如果我有一个U 我很好奇是否有合法的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来完成这个.但是,可以在不基于检查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(私有框架类)的子视图控制器?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1037168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存