【iOS UI】NavigationController重写push、pop方法设置tabBar及返回按钮

主要内容:
1、push时隐藏自定义tabBar;2、自定义返回按钮

一、重写push方法

在新控制器入栈之前,隐藏自定义tabBar,设置新控制器导航条的返回按钮,完后调用父push方法入栈。

push
/**
 *  重写Push方法(隐藏底部的tabbar)
 */
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    //当存在子控制器时才隐藏tabBar
    if (self.viewControllers.count>0) {

        //  隐藏自定义tabBar
        [[APPDELEHGATE xTabBarController]xTabBar].hidden = YES;
        
        //  初始化按钮
        UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        backBtn.frame = CGRectMake(0, 0, 44, 44);
        backBtn.backgroundColor = [UIColor yellowColor];
        [backBtn setImage:[UIImage imageNamed:@"back_button"] forState:UIControlStateNormal];
        [backBtn addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
        backBtn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);

        //  设置左上角按钮
        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];

    }
    //  push入栈
    [super pushViewController:viewController animated:animated];
}

二、重写pop方法

若即将到栈底,则要显示自定义的tabBar。

pop
/**
 *  重写Pop方法(显示底部的tabbar)
 */

- (UIViewController *)popViewControllerAnimated:(BOOL)animated{

    //判断即将到栈底
    if (self.viewControllers.count == 0) {

        //显示自定义的tabBar
        [[APPDELEHGATE xTabBarController]xTabBar].hidden = NO;  

    }
    //  pop出栈
     return [super popViewControllerAnimated:animated];
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容