美文网首页无法删除的专题iOS技术资料iOS 开发每天分享优质文章
解决项目中使用了手势pop的时候push操作有时候会出现卡死的现

解决项目中使用了手势pop的时候push操作有时候会出现卡死的现

作者: i_iOS | 来源:发表于2017-09-01 23:12 被阅读25次

    这个问题困扰了我大半年的时间了,以前用了pop手势,但是自己在使用项目的时候一般都是点击返回按钮,很少用到手势去操作,所以很少发现这个问题,甚至有段时间以为这是iOS系统自身的bug,但是有时候想一想又觉得不可能啊,人家都什么水平啊,我都能出现的问题人家研发开发语言的人怎么可能不知道。

    但是自己平时又很少遇到这个问题 ,往往这种有时候出现有时候不出现的bug真的很难解决,因为复现不了,终于,今天在玩自己开发的项目的时候偶然将这个bug给复现了,并且能够百分百复现。

    然后自己思考了一下,我们需要在项目中实现pop手势的时候需要在根控制器的navigation中实现这样一句代码:

    self.interactivePopGestureRecognizer!.delegate=nil

    然后当我们的应用进行了push以后,就可以使用手势向右滑动进行pop了。

    至于为什么会出现卡死的现象呢,因为我们使用手势pop的前提是我们先进行了push啊,但是如果是直接在根视图控制器下向右滑动呢,结果就把根控制器给pop了,没错,是给pop了,而且这个时候你去打印navigation控制器的话,你会发现,navigationcontroller居然变成nil了,就像杯子没了底,这个时候还怎么装水啊,但是我们看到的页面还在,这个时候我们再去点击页面上的有push功能的地方,我们会发现,成功的push了,但是页面还是没有变啊,相当于已经进入到下一个页面了,但是视图层却不是那一个,然后我们随便点击页面上的任何地方都不会有反映,如果不知道怎么回事的人就会认为是应用卡死了,这是个很严重的问题。

    当然,也不是一定要重启应用才能恢复这个问题,这个时候我们再向右滑动一下pop出没有成功push的页面控制器就好了。

    至于这个问题我们应该怎样解决呢,我们只需要在根控制器中加上一个判断就行了,如果当前的页面是根控制的时候我们就将pop手势给关闭:

    self.navigationController?.interactivePopGestureRecognizer?.isEnabled=false

    反之就给打开:

    self.navigationController?.interactivePopGestureRecognizer?.isEnabled=true

    这样,我们在页面回到跟控制器的时候就不能再进行手势pop了,就不会出现这样的问题了。

    当然,我们也不可能每个根控制都这样去写,我们只需要写一个公共的父类,然后在父类中去实现navigation的代理方法,在navigation的didshow代理方法中判断一下当前navigation的frist控制器是不是当前所在的页面的控制器,是:就关闭手势,不是:就打开手势就行了,就可以完美解决这个问题。修改之后经过了多次测试,终于再也不用担心应用会卡死但是又不知道为什么的情况了。

    经过了这个事情,也应该反省一下自己,我们开发的过程中如果出现了什么比较难发现的bug,一定不要就觉得是系统或者语言有什么问题,应该多找找自己的原因,什么地方没有做到位,一定要反复使用自己开发的项目,你就会发现很多平时不容易出现的bug,慢慢的,才能让自己项目变得完美,给用户一个良好的体验。

    相关文章

      网友评论

        本文标题:解决项目中使用了手势pop的时候push操作有时候会出现卡死的现

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