博客搬家
自定义导航栏,支持手势
#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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。