iOS - 实现UINavigation全屏滑动返回(一)

要点

interactivePopGestureRecognizer 是UINavigationController自带手势,当我们自定义了导航条的返回按钮后,这个手势就自动失效了,也就是说无法滑动返回。

条件

很多情况下我们不得不自定义导航条的返回按钮,但是我们也要滑动返回上一级的效果。

思路

既然自动失效,那我们就告诉它什么时候生效。

  • 在非根控制器下生效(用于滑动返回上一级)
  • 在根控制器下失效(防止根控制器被移除,当然系统不会让我们把它移除,只是会出现bug)

苹果官方文档说明 翻译:第一个被添加的控制器成为永远不会被出栈的根控制器

步骤

自定义一个 UINavigationController ,即继承于 UINavigationController ,名字为 LXFNavigationController ,将代理设为自己,遵守协议 UINavigationControllerDelegate ,�实现代理方法 navigationController:didShowViewController:animated:

代码

LXFNavigationController.m

/** 系统手势代理 */
@property(nonatomic, strong) id popGesture;
- (void)viewDidLoad {
 [super viewDidLoad];

  // 记录系统手势代理
  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;
    }
    // 如果当前控制器为根控制器,则使手势失效,不然手势会将根控制器移除
    if (self.viewControllers.count == 1) {
        self.interactivePopGestureRecognizer.enabled = NO;
    } else {
        self.interactivePopGestureRecognizer.enabled = YES;
    }
}

只有左侧边缘滑动才有效

附上Demo

最后说两句

这样就可以了,但是注意了,现在实现的是滑动返回功能,并没有全屏滑动返回~~接下来看下一篇吧 iOS - 实现UINavigation全屏滑�动返回(二)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏速成应用小程序

怎么避免微信小程序下架审核不通过 【解决办法】

避免被拒小程序不能用作营销活动、广告用途,不能存在类似算命、星座运势之类的测试类内容,不能包含赌博竞猜抽奖等内容。

45117
来自专栏小狼的世界

em是否到了退出的时候

今天看到 YUI CSS 框架中的时,看到用了其用来表示宽度的时候,很多地方都用了 em,在调整字体大小的时候,用了百分比。官方的说法是这样的:

552
来自专栏知晓程序

晓快讯 | 微信里的「看一看」不见了,你发现了吗?

10 月 31 日,有部分 iOS 用户发现,微信插件中的「看一看」功能已经结束使用。

972
来自专栏进步博客

利用css @viewport 做设备适配

在需要调整设备浏览器的viewport时,我们通常在HTML中使用来解决。但是令人意想不到的是,viewport meta标签并不具有“规范性”,即它不是W3C...

491
来自专栏大数据挖掘DT机器学习

10款最好的信息图创建工具

你是否常常看到别人创建的专业信息图而眼红呢?来看看这十个工具吧,你也一样可以创建牛逼的图表哦! 1. Visual.Ly 这是一个非常好用的应用,你可以用它来快...

3889
来自专栏.Net移动开发

.Net语言 APP开发平台——Smobiler学习日志:开发APP时,如何快速地实现屏幕自适应

当AutoHeight属性为“True”时,Mobile Form的Scrollable属性将失去效果,以GridView控件的下面两种情况为例(以下两种情况的...

672
来自专栏逸鹏说道

JQ动态生成的元素,原事件绑定失效

1002
来自专栏知晓程序

Android 惊现小程序「入口」,有图有真相!

1103
来自专栏ytkah

微信公众平台接口报警功能 响应出问题随时发现

  这段时间网络攻击还是很频繁,ddos会导致你的服务器宕机,连接微信公众平台的服务器和接口响应出现问题那就不足为奇了,如何第一时间发现问题呢?微信团队为你想到...

2704
来自专栏企鹅号快讯

小程序入口移到微信主页面,你玩了小游戏没有?

昨天下午3点多,微信公众平台又发出炸裂消息:小程序功能升级,6.6.1版本微信在主界面新增了小程序任务栏的功能。小程序菜单进行了升级,并提供小程序间快速切换的功...

2077

扫码关注云+社区