如何通过Storyboard ID在UITabBarController中展示指定ViewController
解决UITabBarController无法显示的问题
你现在的核心问题是直接把目标ViewController设成了根控制器,完全没有加载UITabBarController,自然看不到底部的TabBar了。正确的思路应该是先加载UITabBarController,再让它选中你想要展示的那个子ViewController,最后把TabBarController设为根控制器。
具体代码实现
假设你的UITabBarController在Storyboard里的ID是MainTabBar(需要你根据自己的实际配置修改),并且它的viewControllers数组已经包含了ID为stats_view的ViewController,那么可以这样写:
// 1. 从Storyboard加载UITabBarController let storyboard = UIStoryboard(name: "Main", bundle: nil) guard let tabBarController = storyboard.instantiateViewController(withIdentifier: "MainTabBar") as? UITabBarController else { fatalError("无法初始化UITabBarController,请检查Storyboard ID是否正确") } // 2. 两种方式选中目标ViewController // 方式一:通过索引(假设stats_view是TabBar里的第2个控制器,索引从0开始) tabBarController.selectedIndex = 1 // 方式二:通过遍历找到对应的VC(更灵活,不用记索引) if let statsVC = tabBarController.viewControllers?.first(where: { $0.restorationIdentifier == "stats_view" }) { tabBarController.selectedViewController = statsVC } // 3. 将TabBarController设为根控制器 window?.rootViewController = tabBarController window?.makeKeyAndVisible()
关键注意事项
- 确保你的UITabBarController在Storyboard里已经正确设置了Storyboard ID,并且它的
viewControllers列表里确实包含了stats_view这个ViewController。 - 如果你是用遍历的方式找VC,要确认
stats_view的ViewController的restorationIdentifier和你代码里写的一致(它和Storyboard ID默认是同步的,但也可以单独设置)。
内容的提问来源于stack exchange,提问作者M. Holm
相关产品推荐
相关产品推荐

