根据网上的资料现记录下两种实现全屏返回的方法:
方法一:
首先创建一个BaseNavigationController 只要添加下面的方法就搞定了。
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *targets = [self.interactivePopGestureRecognizer valueForKey:@"_targets"];
id target = [targets.firstObject valueForKey:@"target"];
SEL action = NSSelectorFromString(@"handleNavigationTransition:");
//创建滑动手势
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:target action:action];
[self.view addGestureRecognizer:panGesture];
}
方法二:
<推荐使用,第一种会有小问题>
#import <objc/runtime.h>
@interface BaseNavigationController ()<UINavigationControllerDelegate>
/** 系统手势代理 */
@property(nonatomic, strong) id popGesture;
/** 实现代理*/
self.popGesture = self.interactivePopGestureRecognizer;
self.delegate = self;
/** 实现代理方法 */
#pragma mark - UINavigationControllerDelegate
// 当控制器显示完毕的时候调用
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// 根据 栈 先进后出
if (self.viewControllers[0] == viewController) { // 根控制器
// 还原代理
self.interactivePopGestureRecognizer.delegate = self.popGesture;
} else { // 非控制器
// 清空手势代理就能实现滑动返回,iOS6不支持
self.interactivePopGestureRecognizer.delegate = nil;
}
}
最后,只要在Main.storyboard将NavigationCotroller继承BaseNavigationController 就可以了。
网友评论