共计 2387 个字符,预计需要花费 6 分钟才能阅读完成。
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
正文完