iOS开发如何正确地Push到另外一个viewcontroller

ios开发经常要做各种页面的跳转。
我的viewcontrooler结构是这样的

UITabbarViewController
-> UINavigationController -> UIViewController
-> UINavigationController -> UIViewController
.....

简单的说就是普通的tab应用。
当我在首页用push跳转到另一个UINavigationController时,底下的tabbar还保留着。
一般项目中,我们是如何处理这个push跳转的。
我目前的做法是push前手动吧tabbar隐藏掉,然后返回之后,在viewDidAppear再把tabbar显示出来。
但是总感觉这样不是很靠谱。
有没有其他的方法呢。

阅读 8.6k
5 个回答

这个有个小技巧 你可以试下 自定义UINavigationController 然后重写push方法 隐藏底部的工具条 如果全局需求 就所有的VC都用自定义naviVC包装 如果只有一个页面 那么就单独用这个控制器包装。因为是重写push方法,所以不用你pop之后重新显示tabbar。具体代码在下面

#pragma mark - 重写导航控制器的push方法,拦截push操作
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    
    // 统一隐藏底部的tabbar
     viewController.hidesBottomBarWhenPushed = YES;
    
    // 该方法只适用于toolBar的隐藏
    
    NSLog(@"%@",[viewController class]);//viewController 目标控制器
    
    // 执行系统默认的push操作
    [super pushViewController:viewController animated:animated];

}

在 push 的时候用下面的代码,返回的时候 Tabbar 应该是自动出现的吧。

UIViewController *targetViewController = ...;
targetViewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:targetViewController animated:YES];

其实我一直认为应该把导航控制器放在最顶层。弱化tabbar,这样的代码更有效。

新手上路,请多包涵

YTHelpCenterViewController *YTHCVC = [[YTHelpCenterViewController alloc] init];

        **[YTHCVC setHidesBottomBarWhenPushed:YES];**
        [self.navigationController pushViewController:YTHCVC animated:YES];
        
        
        可以这么写,这样的话效果会比在viewwillappear里写隐藏好一些.试过就知道了.
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题