ios 滑动返回出现问题以及解决方法

转载 2015年11月17日 16:33:44

UINavigationController滑动返回,有需要的朋友可以参考下。


最近做了UINavigationController的滑动返回(IOS7及以后系统默认支持的), 主要分成以下几步以及碰到的问题, 我这里做个总结:

*.首先说明个普遍碰到的问题

网上普遍看到说, 在UINavigationController下自定义leftBarButtonItem会导致滑动失效, 解决方案:http://blog.csdn.net/meegomeego/article/details/25879605

但我想告诉大家, 我也是自定义了leftBarButtonItem却没有碰到上述问题, 我是统一写了一个BaseViewController作为所有controller父类, 除了rootConrtoller, 这里不知为何, 有知道的可以留言.

排除上述原因, 下面介绍下怎么实现滑动:

1. 自定义UINavigationController(我写了个UIBaseNavigationController)以共用, 在ViewDidLoad里加入代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    /* UINavigationControllerDelegate */
    self.delegate = self;
    
    / swipe gesture /
    __weak typeof (self)weakSelf = self;
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
//        self.interactivePopGestureRecognizer.enabled = YES;
          /* UIGestureRecognizerDelegate */
          self.interactivePopGestureRecognizer.delegate = weakSelf;
    }
}

这里是将interactivePopGestureRecognizer.delegate赋给self. 这样便可以实现滑动, 因为enabled默认是YES.2. 在滑动过程中你会发现如果在pushViewController的动画过程中激活滑动手势会导致crash, 解决方案
/ set gesture no when pushViewController /
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.enabled = NO;
    }
    
    [super pushViewController:viewController animated:animated];
}

在push的时候关闭手势, 这样就不用担心会激活滑动3. 自然, 在当你加载完成下一个viewController之后需要激活滑动手势:
/ set gesture yes when showViewController /
- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated
{
    if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
}

4. 当然, 你还会发现一个问题:在rootController下滑动的时候, 在想push到下一个页面会没有反应, 界面卡死在那了, 所以还需要在上述方法中加入以下代码:
/ set gesture yes when showViewController /
- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated
{
    if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
    
    / if rootViewController, set delegate nil /
    if (navigationController.viewControllers.count == 1) {
        navigationController.interactivePopGestureRecognizer.enabled = NO;
        navigationController.interactivePopGestureRecognizer.delegate = nil;
    }
}

在判断当前为rootController, 设置手势无效, 而且必须设置delegate为nil, 这样的话就可以解决卡死的问题了.这样的话, 就可以完成navigationcontroller下的返回滑动了, 和微信一样一样滴~~~~~

android右滑返回上一个界面

咳咳,又到了装逼时刻,试问,天下英雄,人生何处不装逼..... 一看标题,多么明显,多么大气,告诉我,你懂了吗?.....OK,放下你们手中的刀,我保证认真写... 现在特么的各种功能都要仿ios,仿...
  • apple_xiangsiyu
  • apple_xiangsiyu
  • 2016年03月28日 17:52
  • 1836

解决SwipeBackLayout滑动返回时显示桌面而不是显示上一层的Bug

转载地址:http://blog.csdn.net/leebe/article/details/44750959 [html] view plaincopy ...
  • u011513914
  • u011513914
  • 2015年10月19日 17:05
  • 625

iOS之手势滑动返回功能

iOS中如果不自定义UINavigationBar,通过手势向右滑是可以实现返回的,这时左边的标题文字提示的是上一个ViewController的标题,如果需要把文字改为简约风格,例如弄过箭头返回啥的...
  • LVXIANGAN
  • LVXIANGAN
  • 2016年04月02日 10:34
  • 3215

iOS 手势滑动返回功能

方法一 BaseViewController 是要添手势的控制器 BaseViewController.m #import "BaseViewController.h...
  • applexiaozhu
  • applexiaozhu
  • 2016年06月23日 11:06
  • 1302

iOS 解决自定义导航栏返回按钮 系统右滑返回手势失效问题 最简单方法

使用系统的返回按钮当然什么问题都没有,但是如果要自定义返回按钮 ,将会出现系统右滑手机失效的问题。网上解决方法很多。这里只简单提供一种较为简单的方法. A控制器push到B控制器。 在B控制器里,...
  • HDFQQ188816190
  • HDFQQ188816190
  • 2016年08月24日 15:49
  • 2376

解决SwipeBackLayout滑动返回时显示桌面而不是显示上一层的Bug

由于我们用SwipeBackLayout需要将App的Theme添加一个透明的属性,这就是导致出现Bug的源头。  我们...
  • leebe
  • leebe
  • 2015年03月30日 14:50
  • 1513

iOS自定义NavigationBar后如何实现全屏右滑返回

本文是在广州小码哥高级导师吖了个峥的文章《8行代码教你搞定导航控制器全屏滑动返回效果》的基础上进行了修改后的成果。原文链接附上:http://www.cocoachina.com/ios/201508...
  • yanjinfeng_S
  • yanjinfeng_S
  • 2015年11月19日 17:45
  • 1857

iOS 边缘滑动返回

边缘滑动返回,在设置了自定义导航条或者自定义左button的时候会失效,通过这句话可以解决bug :self.navigationController.interactivePopGestureRe...
  • zhangjitao_boke
  • zhangjitao_boke
  • 2016年07月20日 16:56
  • 1822

storyboard presentViewController pushViewController 跳转后黑屏 NavigationBar按钮push

环境:XCode5.1,iOS6样式
  • lanmanck
  • lanmanck
  • 2014年08月11日 11:34
  • 13072

初学者---Android 使用SwipeBackLayout实现滑动返回上一级页面

先贴一下作者的Github地址:https://github.com/ikew0ng/SwipeBackLayout 先来看效果图: 下面来说说使用: 1. 在module得到build.gr...
  • xcjean
  • xcjean
  • 2017年12月11日 19:08
  • 133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios 滑动返回出现问题以及解决方法
举报原因:
原因补充:

(最多只允许输入30个字)