乐趣区

关于ios:iOS-自定义-NavigationController

2019/01/10 16:20

自定义导航栏,反对手势


#import "JINavigationController.h"

@interface JINavigationController ()<UINavigationControllerDelegate,UIGestureRecognizerDelegate>

@end

@implementation JINavigationController

+ (void)initialize {
    //appearance 办法返回一个导航栏的外观对象
    // 批改了这个外观对象,相当于批改了整个我的项目中的外观
    UINavigationBar *navigationBar = [UINavigationBar appearance];
    // 设置导航栏背景色彩
    [navigationBar setBarTintColor:[UIColor whiteColor]];
    // 设置标题栏色彩
    navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:[UIColor blackColor], NSFontAttributeName : [UIFont systemFontOfSize:18]};
    // 设置 NavigationBarItem 文字的色彩
    //[navigationBar setTintColor:[UIColor blackColor]];
}

- (void)viewDidLoad {[super viewDidLoad];
    __weak typeof(self) wkself = self;
    self.delegate = wkself;
}

///MARK: override
// 全副批改返回按钮, 然而会失去右滑返回的手势
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{if (self.viewControllers.count > 0) {
        viewController.hidesBottomBarWhenPushed = YES;
        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btn_back_black"] style:UIBarButtonItemStyleDone target:self action:@selector(backClickedAction)];
    }
    // 在 push 一个新的 VC 时,禁用滑动返回手势
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {self.interactivePopGestureRecognizer.enabled = NO;}
    [super pushViewController:viewController animated:animated];
}

-(void)backClickedAction {[self popViewControllerAnimated:YES];
}

///MARK: UINavigationControllerDelegate
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    // 齐全展现出 VC 时,启用滑动返回手势
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.delegate = self;
        self.interactivePopGestureRecognizer.enabled = YES;
    }
    // 解决根试图左滑页面卡死
    if (navigationController.viewControllers.count == 1) {
        navigationController.interactivePopGestureRecognizer.enabled = NO;
        navigationController.interactivePopGestureRecognizer.delegate = nil;
    }
}

///MARK: UIGestureRecognizerDelegate
// 承受多手势
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{return YES;}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}

@end
退出移动版