来自MG

//
//  MGNavVC.m
//  MGDemo
//
//  Created by ming on 16/7/8.
//  Copyright © 2016年 ming. All rights reserved.
//

#import "MGNavVC.h"

@interface MGNavVC ()<UINavigationBarDelegate,UIGestureRecognizerDelegate>

@end

@implementation MGNavVC

+ (void)load {
    /// 1.UINavigationBar
    UINavigationBar *navBarAppearence = [UINavigationBar appearance];
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    dict[NSFontAttributeName] = [UIFont systemFontOfSize:17];
//    [navBarAppearence setBackgroundImage:[UIImage imageNamed:@"timo"] forBarMetrics:UIBarMetricsDefault];
    [navBarAppearence setTitleTextAttributes:dict];
}

#pragma mark ========= 添加全屏滑动手势 ==========
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // setp1:需要获取系统自带滑动手势的target对象
    id target = self.interactivePopGestureRecognizer.delegate;
    
    // setp2:创建全屏滑动手势~调用系统自带滑动手势的target的action方法
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
    
    // step3:设置手势代理~拦截手势触发
    pan.delegate = self;
    
    // step4:别忘了~给导航控制器的view添加全屏滑动手势
    [self.view addGestureRecognizer:pan];
    
    // step5:将系统自带的滑动手势禁用
    self.interactivePopGestureRecognizer.enabled = NO;
    
    // steo6:还记得刚刚设置的代理吗?下面方法什么时候调用?在每次触发手势之前都会询问下代理,是否触发。
}
- (void)handleNavigationTransition:(UIPanGestureRecognizer *)pan{
    NSLog(@"%s",__func__);
}
/** 判断是否为根控制器 */
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    // 只要不等于1就返回YES,说明此时具有滑动功能
    return self.childViewControllers.count != 1;
}

#pragma mark ========= 拦截控制器的push操作 ==========
/**
 *   拦截控制器的push操作
 */
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
    
    if (self.childViewControllers.count > 0) {
        // 判断当前控制器是否为根控制器,如果不是,就执行下列代码
        UIBarButtonItem *leftItem = [UIBarButtonItem itemWithImage:@"navigationButtonReturn"  highImage:nil title:@"返回" target:self action:@selector(leftBtnClick)];
    
        [viewController.navigationItem setLeftBarButtonItem:leftItem animated:YES];
        
        // 隐藏下面的TabBar
        viewController.hidesBottomBarWhenPushed = YES;
    }
//    else{
//        viewController.hidesBottomBarWhenPushed = NO;
//    }
    
    // 这句super的push要放在后面, 让viewController可以覆盖上面设置的leftBarButtonItem
    [super pushViewController:viewController animated:animated];
    
}

// 监听按钮的点击
- (void)leftBtnClick{
    [self popViewControllerAnimated:YES];
}

@end