如何从Storyboard获取TabBarViewController的全部视图控制器?
解决UITabBarController获取全部视图控制器的问题
这是iOS开发里很容易踩的一个小坑!你遇到的情况是UITabBarController的默认行为导致的:当标签页数量超过4个时,系统会自动把第5个及以后的控制器放到一个「更多」导航控制器(也就是moreNavigationController)里,而你用的childViewControllers属性只会返回前4个直接显示的控制器 + 这个「更多」导航控制器,不会直接给出剩下的3个。
修正方案
真正存储所有标签页控制器的是TabBarController本身的viewControllers属性,直接访问它就能拿到完整的7个视图控制器。修改后的代码如下:
let storyboard = UIStoryboard(name: "Main", bundle: nil) // 强制转成UITabBarController,避免类型不确定导致的问题 guard let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarViewController") as? UITabBarController else { fatalError("无法实例化指定的TabBarController,请检查Storyboard中的标识符是否正确") } // 这里拿到的就是全部7个视图控制器了 let allTabViewControllers = tabBarController.viewControllers ?? []
额外说明
- 如果你需要单独获取「更多」菜单里的控制器,可以通过
tabBarController.moreNavigationController.viewControllers来获取,但大多数场景下直接用tabBarController.viewControllers就足够拿到完整列表了。 - 一定要加上类型转换的判断,防止因为Storyboard标识符错误或者类型不匹配导致运行时崩溃。
内容的提问来源于stack exchange,提问作者Stéphane de Luca
相关产品推荐
相关产品推荐

