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