You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:56:12