如何在非TabBarController的Signup页面显示原有3个VC的TabBar?
实现方法:在Signup页面显示原有TabBar
嘿,这个需求其实挺常见的,我给你整理了两种靠谱的实现思路,优先推荐第一种,省心又符合iOS开发规范:
方法一:通过导航控制器Push(首推!)
首先假设你的TabBarController里的每个子页面(Vc1、Vc2、Vc3)都包裹在UINavigationController里——这是iOS开发里的常规操作,方便管理页面跳转。具体步骤如下:
- 在Vc2的按钮点击事件里,先初始化Signup页面,一定要设置它的
hidesBottomBarWhenPushed属性为NO,然后再push进去:
// Objective-C代码示例 - (IBAction)jumpToSignup:(UIButton *)sender { SignupViewController *signupVC = [[SignupViewController alloc] initWithNibName:@"SignupViewController" bundle:nil]; // 关键!设置这个属性,Push后TabBar才不会消失 signupVC.hidesBottomBarWhenPushed = NO; [self.navigationController pushViewController:signupVC animated:YES]; }
// Swift代码示例 @IBAction func jumpToSignup(_ sender: UIButton) { let signupVC = SignupViewController(nibName: "SignupViewController", bundle: nil) // 核心设置,让TabBar留在页面底部 signupVC.hidesBottomBarWhenPushed = false navigationController?.pushViewController(signupVC, animated: true) }
- 为啥这个属性这么重要?
默认情况下,从TabBar下属的导航控制器里Push新页面时,系统会自动隐藏TabBar(因为hidesBottomBarWhenPushed默认是YES)。我们把目标页面的这个属性改成NO,就是告诉系统:“就算跳转到这个页面,也得把底部的TabBar留住”。
方法二:手动添加TabBar(特殊场景用)
如果你的项目结构比较特殊,比如Vc2没被导航控制器包裹,或者必须手动加TabBar,那可以这么做,但我不太推荐——因为要自己维护TabBar的状态,挺麻烦的:
- 在Signup页面的
viewDidLoad里,创建一个和原有TabBar样式、选项完全一致的UITabBar实例,设置好它的位置(一般在页面底部),然后添加到Signup的view上。 - 给这个手动加的TabBar设置代理,处理点击事件,跳转到对应的Vc1/Vc2/Vc3。
- 注意:你还得同步原TabBar的选中状态、样式变化,比如原TabBar切换了选中项,这个手动的也要跟着变,维护成本很高,所以非必要别选这个。
避坑提醒
- 千万别用
present方法跳转到Signup!模态出来的页面是独立于TabBar上下文的,系统不会帮你显示TabBar,除非你手动加,那更麻烦。 - 如果你的Vc2还没被导航控制器包裹,建议先把它放进
UINavigationController,再作为TabBar的子项——这不仅能解决当前问题,后续页面跳转也会更顺畅。
内容的提问来源于stack exchange,提问作者Behroz Khan
相关产品推荐
相关产品推荐

