[iOS]解决iOS7之后某些原因导致屏幕侧滑不返回上一页的方法

在iOS7的时候,水果推出了一个功能,就是当你在当前页面时,如果该页面是由上一个页面push出来的,那么在屏幕左侧边缘侧滑可以快速回到上一个页面,这个功能对于大屏手机来说是十分方便的。但是,在我们实现某个页面UI布局后,可能会发现这个功能失效了,在这里来记录一下解决方法。

首先要说的是NavigationController的左按钮的展现顺序:

  1. 第二页的leftBarButtonItem
  2. 第一页的backBarButtonItem
  3. 第一页的title
  4. 默认显示的

接下来要说侧滑失效的原因:

如果我们使用的是系统级别的UINavigationController,并且我们第二个页面的左按钮是通过展示第二个页面的leftBarButtonItem来实现的,那么此时这个功能就会失效。

解决方法

自定义一个UINavigationController,继承自UINavigationController,通过设置他推出页面时的代理来解决侧滑返回失效问题。

.h文件
#import 

@interface MyNavigationController : UINavigationController

@end
.m文件
#import "myNavigationController.h"

@interface MyNavigationController ()
@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

这样,即使使用的是第二个页面的leftBarButtonItem,也不会出现侧滑返回失效的问题了。

你可能感兴趣的:([iOS]解决iOS7之后某些原因导致屏幕侧滑不返回上一页的方法)