在iOS7的时候,水果推出了一个功能,就是当你在当前页面时,如果该页面是由上一个页面push出来的,那么在屏幕左侧边缘侧滑可以快速回到上一个页面,这个功能对于大屏手机来说是十分方便的。但是,在我们实现某个页面UI布局后,可能会发现这个功能失效了,在这里来记录一下解决方法。
首先要说的是NavigationController的左按钮的展现顺序:
- 第二页的leftBarButtonItem
- 第一页的backBarButtonItem
- 第一页的title
- 默认显示的 <back
接下来要说侧滑失效的原因:
如果我们使用的是系统级别的UINavigationController,并且我们第二个页面的左按钮是通过展示第二个页面的leftBarButtonItem来实现的,那么此时这个功能就会失效。
解决方法
自定义一个UINavigationController,继承自UINavigationController,通过设置他推出页面时的代理来解决侧滑返回失效问题。
.h文件
#import <UIKit/UIKit.h>
@interface MyNavigationController : UINavigationController
@end
.m文件
#import "myNavigationController.h"
@interface MyNavigationController ()<UINavigationControllerDelegate>
@property (nonatomic, weak) id PopDelegate;
@end
@implementation MyNavigationController
- (void)viewDidLoad {
[super viewDidLoad];
self.PopDelegate = self.interactivePopGestureRecognizer.delegate;
self.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (viewController == self.viewControllers[0]) {
self.interactivePopGestureRecognizer.delegate = self.PopDelegate;
}else{
self.interactivePopGestureRecognizer.delegate = nil;
}
}
@end