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

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

作者: PlutoMa | 来源:发表于2016-01-23 09:32 被阅读744次

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

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

    1. 第二页的leftBarButtonItem
    2. 第一页的backBarButtonItem
    3. 第一页的title
    4. 默认显示的 <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
    

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/yfrrkttx.html