美文网首页导航控制器IOS 导航控制器iOS开发好文
自定义的导航控制器(UINavigationController

自定义的导航控制器(UINavigationController

作者: jueyingxx | 来源:发表于2015-03-09 00:16 被阅读898次

// EFNavigationController.h
// JueyingWeibo
//
// Created by Jueying on 15/3/4.
// Copyright (c) 2015年 MyCompany. All rights reserved.
//

     @interface EFNavigationController : UINavigationController

     @end

// EFNavigationController.m
// JueyingWeibo
//
// Created by Jueying on 15/3/4.
// Copyright (c) 2015年 MyCompany. All rights reserved.
//

    #import "EFNavigationController.h"
     @interface EFNavigationController ()
    
    @end

    @implementation EFNavigationController

当EFNavigationController这个类第一次加载的时候,只调用一次
+initialize,这个方法是当第一次给这个类发送消息时调用一次

    + (void)initialize {
    // 设置导航控制器barButtonItem的title颜色
    [[UIBarButtonItem appearance]
     setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor 
     orangeColor]} forState:UIControlStateNormal];

    [[UIBarButtonItem appearance] 
    setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor
     redColor]} forState:UIControlStateHighlighted];

    [[UIBarButtonItem appearance] 
    setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor 
    lightGrayColor]} forState:UIControlStateDisabled];

    }

    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self leftTouchBack];
    }

    - (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }

#pragma mark - Pan gestureRecognizer

- (void)leftTouchBack {
    // 获取系统自带滑动手势的target对象
    id target = self.interactivePopGestureRecognizer.delegate;

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
#pragma clang diagnostic pop
    pan.delegate = self;
    [self.view addGestureRecognizer:pan];
    self.interactivePopGestureRecognizer.enabled = NO;
    _panGesture = pan;  
// 创建一个成员变量,可以在禁止手势的地方直接调用_panGesture.enable = NO;来禁用手势。
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if (self.childViewControllers.count == 1) {
        return NO;
    }
    return YES;
}
  
#pragma mark - 重写push方法

    - (void)pushViewController:(UIViewController *)viewController
    animated:(BOOL)animated {

     if (self.viewControllers.count > 0) {//除了根视图控制器以外的所有控
    制,以压栈的方式push进来,就隐藏tabbar

    viewController.hidesBottomBarWhenPushed = YES;

     viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem 
     itemWithNormal:@"navigationbar_back" 
     highlighted:@"navigationbar_back_highlighted" target:self
    action:@selector(back)];

    viewController.navigationItem.rightBarButtonItem = [UIBarButtonItem 
    itemWithNormal:@"navigationbar_more" 
    highlighted:@"navigationbar_more_highlighted" target:self 
    action:@selector(popToRoot)];

    }
     [super pushViewController:viewController animated:animated];
    }

    - (void)back {

    [self popViewControllerAnimated:YES];

    }

    - (void)popToRoot {

    [self popToRootViewControllerAnimated:YES];

    }
    @end

相关文章

网友评论

    本文标题:自定义的导航控制器(UINavigationController

    本文链接:https://www.haomeiwen.com/subject/kjuvxttx.html