Swift 4中为TabBarController设置无TabBarItem的主/根页面
解决方案:给TabBarController添加无TabBarItem的初始主页面
嘿,作为Swift+Storyboard的新手,你的需求其实很容易实现,我来一步步帮你搞定:
1. 创建并添加主页面到TabBarController
- 打开Storyboard,拖一个新的
ViewController到画布上,给它起个直观的名字(比如MainHomeVC),这就是你的主/根页面。 - 按住
Ctrl键,从你的TabBarController拖拽到这个新的MainHomeVC,选择Relationship Segue - view controllers,把它添加为TabBarController的子控制器。 - 在Storyboard左侧的Document Outline面板里,找到
TabBarController的子控制器列表,把MainHomeVC拖到最顶部,这样它就会成为TabBarController的初始显示页面。 - 选中
MainHomeVC的TabBarItem,按Delete键删掉它,这样TabBar就只会显示你原来的3个TabBarItem了。
2. 控制TabBar的显示/隐藏(可选)
如果你希望主页面不显示TabBar,而其他三个页面保持显示:
- 在
MainHomeVC的代码里添加:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 隐藏TabBar self.tabBarController?.tabBar.isHidden = true }
- 然后在你原来的三个ViewController的
viewWillAppear方法里添加:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 显示TabBar self.tabBarController?.tabBar.isHidden = false }
3. 处理返回按钮跳转
现在你的三个页面已经有返回按钮了,只需要让点击按钮时切换回主页面:
- 打开任意一个原有ViewController的代码,找到返回按钮的点击事件(比如
@IBAction方法),添加如下代码:
@IBAction func backToMainButtonTapped(_ sender: UIButton) { // 获取当前的TabBarController guard let tabBarVC = self.tabBarController else { return } // 切换到索引为0的子控制器(也就是我们的主页面) tabBarVC.selectedIndex = 0 }
- 把这段代码复制到另外两个ViewController的返回按钮点击事件里就行。
小提醒
因为主页面没有TabBarItem,所以TabBar上的三个Item对应的是TabBarController子控制器列表中第2、3、4位的VC,当你切换到主页面时,TabBar的选中状态可能会停留在之前的Tab上,这是正常现象,不影响使用。
内容的提问来源于stack exchange,提问作者madhatter989
相关产品推荐
相关产品推荐

