解决UINavigationController自定义返回键后没有侧滑返回效果的问题
1.思路
用自定义的UINavigationController进行代理实现,其它地方的导航栏都要使用这个自定义的
2.代码实现
#import "DPMNavigationController.h"
@interface DPMNavigationController () <UINavigationControllerDelegate, UIGestureRecognizerDelegate>
@property (nonatomic, weak) UIViewController *viewController;
@end
@implementation DPMNavigationController
- (instancetype)initWithRootViewController:(UIViewController *)rootViewController {
DPMNavigationController *nav = [super initWithRootViewController:rootViewController];
nav.interactivePopGestureRecognizer.delegate = self;
nav.delegate = self;
return nav;
}
#pragma mark UINavigationControllerDelegate
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (1 == navigationController.viewControllers.count) {
self.viewController = nil;
} else {
self.viewController = viewController;
}
}
#pragma mark UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer == self.interactivePopGestureRecognizer) {
return self.viewController == self.topViewController;
}
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
return YES;
} else {
return NO;
}
}
@end
参考:http://www.bubuko.com/infodetail-790664.html