滑动返回上一层级


       为了实现自己的设计风格,体现自己的特色,大部分公司都会采用完全定制导航栏以及导航栏上面的控件,这样除了容易控制也能更方便、更随意。那其实自定义导航栏是一把双刃剑,满足自己需求以外,你可能还会丢失一些东西,比如说,手势拖动返回上一层级,可能就会失效了,那么,又想自定义控件,还想实现拖动返回的效果,那该怎么做呢:

       首先,要知道,iOS 7除了在传统的左上角添加返回键之外,还提供了右滑返回上一级界面的手势。他是UINavigationController新增的一个属性,因为所谓的拖动返回上一层级,其实就是进出栈。他是由导航控制器来实现的。而UINavigationController的这个属性就是interactivePopGestureRecognizer,即右滑返回只支持以UINavigationController为容器的ViewController间切换,要想在自定义容器中使用,还需要一些额外的工作。

 

1、一般的如果想控制ViewController是否启用右滑返回,只需要这样:不过此属性,默认就是YES

            self.navigationController.interactivePopGestureRecognizer.enabled= YES;

2、如果你是自定义了返回按钮,那么拖动返回效果就是失效,那么可以这么做:viewWillAppear中添加如下代码:           

           self.navigationController.interactivePopGestureRecognizer.delegate= self;

此时即可实现拖动返回的效果

3、但是此时你会发现一个问题:就是你在首页(跟视图)拖动返回的时候,你会发现,他并没有什么反应,此时,你再点击进入下一层级的话,会出现他并没有进入下一个界面,如果你此时进入后台,然后再重新进入前台的话,会发现他已经进入下一层级,其实,当你在首页拖动返回上一层级的时候,因为他是栈中的第一个,已经没有上一层级,所以在首页(跟视图)的时候,你需要禁用interactivePopGestureRecognizer的这个属性,设置成NO即可

那么你可以这么做:

      -(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

     {

               if (self.navigationController.viewControllers.count == 1)//关闭主界面的右滑返回

              {

                        return NO;

              }else {

                        return YES;

              }

      }

这样,就不会出现上述问题了

 

 

 






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值