美文网首页
杂⑦碎八之--导航控制器滑动返回功能

杂⑦碎八之--导航控制器滑动返回功能

作者: Vampire_Jam | 来源:发表于2016-07-25 21:43 被阅读43次

ios7之后,导航控制器自带滑动返回功能,且是边缘侧滑返回功能.

使用UINavigationController进行控制器跳转的时候,

如果我们修改了系统自带的返回按钮,导致滑动返回功能失效.

那么我们想要使用自定义按钮,又想使用导航控制器的滑动返回功能

这个Bug如何解决?

当我们使用自定义按钮的时候,按钮将系统自带的返回按钮遮挡,此时才导致侧滑返回失效. 为什么滑动返回功能失效? 

分析:当我们没有使用自定义按钮时,系统默认侧滑返回的实现,这里的消息传递由代理实现.所以是代理让滑动功能失效

验证:

滑动返回肯定需要一个手势,那么在头文件中查找,找到interactivePopGestureRecognizer  翻译过来是返回交互手势,那么可以肯定苹果底层对这个手势进行了某些操作.

通过打印interactivePopGestureRecognizer 以及 它的代理,打印结果如下:

此时可以确定,底层对这个手势进行了操作.

那么,我们想要我们自定义的按钮对滑动手势进行响应时,将代理赋值为nil,不需要它来监听手势,按照默认响应滑动事件.

此时滑动返回功能完全实现,但是存在一个Bug:应用程序会出现假死状态.

策略:将手势代理设置为自己,实现响应事件

self.interactivePopGestureRecognizer.delegate = self;

注意:这个滑动返回功能是边缘侧滑返回!!!!!也就是说在view中间或者其他地方滑动是不能实现界面返回的!!!!

实现全屏滑动返回代码如下:

①干掉系统边缘侧滑手势:

self.interactivePopGestureRecognizer.enabled = NO;

②创建滑动返回手势:

注意: 该方法中第一个参数是:系统调用的对象,因为打印结果_UINavigationInteractiveTransition是私有的类,我们无法拿到,但是代理对象和它属于同一个类,我们可以通过代理代理来代替这个对象,拿到它的方法.

第二个参数action:就是系统滑动返回的方法,直接拿来用就可以

③将手势添加到当前view  并设置手势代理,

④代理方法实现

此代理方法是在UITabBarController  UINavigationController一起使用的时候用作的判断(根控制器不需要滑动返回功能).

相关文章

  • 杂⑦碎八之--导航控制器滑动返回功能

    ios7之后,导航控制器自带滑动返回功能,且是边缘侧滑返回功能. 使用UINavigationController...

  • 全屏滑动返回的实现

    全屏滑动返回功能的实现: 1. 实现边缘滑动返回 默认导航控制器都是有滑动返回功能,由于我们自定义了控制器的返回按...

  • 全屏滑动返回

    1.导航控制器自带了滑动返回(iOS7) 2.但是设置界面没有滑动返回功能 3.恢复滑动返回 分析:为什么滑动返回...

  • 关于滑动返回手势新发现

    相信对于滑动返回手势大家都不会陌生了,不就是导航控制器自带的滑动返回手势嘛,系统自带的功能。当自定义导航条的返回按...

  • 自定义导航控制器实现全屏滑动返回功能

    问题:如果我们在项目中的返回按钮用的是leftBarButtonItem 那么系统自带导航控制器的滑动返回功能失效...

  • UINavigationBar隐藏问题

    由于项目中使用FDFullscreenPopGesture框架,实现滑动返回功能。在需要隐藏导航栏的控制器view...

  • 导航控制器全屏滑动返回效果

    导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能。但是如何实现全屏滑动返回效果? 分析:...

  • iOS全屏返回处理

    8行代码搞定导航控制器全屏滑动返回效果

  • 自定义导航栏实现全屏滑动返回

    导航控制器默认自带了侧滑功能,当用户在界面的左边滑动的时候,就会有侧滑功能打印导航控制器自带的滑动手势,看下它的真...

  • 手势移除控制器

    如果滑动移除控制器的功能失效,清空代理(让导航控制器重新设置这个功能) self.interactivePopGe...

网友评论

      本文标题:杂⑦碎八之--导航控制器滑动返回功能

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