2019独角兽企业重金招聘Python工程师标准>>>

苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecognizer.enabled = YES;

这个api功能就是在NavigationController堆栈内的UIViewController可以支持右滑手势,也就是不用点击右上角的返回按钮,轻轻在屏幕左边一滑,屏幕就会返回,随着ios设备屏幕的增大,这个小功能让手指短,拇指大和手残人士看到了福音。

这个功能是好,但是经常我们会有需求定制返回按钮,如果手动定制了返回按钮,这个功能将会失效,也就是自定义了navigationItem的leftBarButtonItem,那么这个手势就会失效。

首先让VIewController遵守

UIGestureRecognizerDelegate协议

1.重新设置手势的delegate

 self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;

 2.当然你也可以自己响应这个手势的事件

[self.navigationController.interactivePopGestureRecognizeraddTarget:selfaction:@selector(handleGesture:)];

如果只是简单定制了返回按钮,第一种最简单,一句代码搞定。

当然,在添加右滑返回的时候会遇见一个大坑,就是当退到NavigationController的rootViewController的时候继续右滑的话会遇见界面卡死的问题,解决这个问题的方法也很简单。

在rootViewController的viewDidAppear方法里面添上

self.navigationController.interactivePopGestureRecognizer.enabled = NO

在其他的ViewController的viewWillAppear方法里加上

self.navigationController.interactivePopGestureRecognizer.enabled = YES

这句话的作用是禁止使用右滑手势。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

UIGestureRecognizerDelegate

1. self.navigationController.interactivePopGestureRecognizer.enabled = YES | NO;      手势有效与否

2. self.navigationController.interactivePopGestureRecognizer.delegate = self;               手势的代理,一般会设置为self

1中的属性,再viewcontroller中默认的设置为YES,即手势有效.按照2中的属性设置后,当前的viewcontroller即可以实现该向右滑动后退功能,但是当回到navigationController的rootView中再次做出向右滑动时,程序会有问题(再次push子controller时,程序卡在当前界面无法跳转).有效解决方案如下:

说明:有两个controllerA,B

navigationController的rootview设置为A,在A中点击按钮后push B.在A的 -(void)viewDidAppear:(BOOL)animated方法中加入self.navigationController.interactivePopGestureRecognizer.enabled = NO;代码如下:

1

2

3

4

5

6

7

- (void)viewDidAppear:(BOOL)animated

{

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {

        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动

    }

}

然后再B中的- (void)viewDidLoad方法中加入

1

2

3

4

5

6

7

8

9

10

11

12

- (void)viewDidLoad

{

    // 配置返回按钮

    UIBarButtonItem * backItem = [self barButtonForImageNames:@[@"icon-返回", @"", @""] action:@selector(popBack)];

    backItem.title = @"";

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {

        self.navigationController.interactivePopGestureRecognizer.enabled = YES;

        self.navigationController.interactivePopGestureRecognizer.delegate = self;

    }

    self.navigationItem.leftBarButtonItem = backItem;

}

这样即可以保证再A中向右滑动后再次pushB时不会卡在A界面.

转载于:https://my.oschina.net/u/2345393/blog/863078

iOS 为自定义返回按钮的页面添加右滑返回相关推荐

  1. android右滑返回动画,Android仿微信右滑返回功能的实例代码

    先上效果图,如下: 先分析一下功能的主要技术点,右滑即手势判断,当滑到一直距离时才执行返回,并且手指按下的位置是在屏幕的最左边(这个也是有一定范围的),  这些可以实现onTouchEvent来实现. ...

  2. 【转】iOS右滑返回手势全解和最佳实施方案

    序言 在ios7以后,苹果推出了手势滑动返回功能,也就是从屏幕左侧向右滑动可返回上一个界面.大大提高了APP在大屏手机和iPad上的操作体验,场景切换更加流畅.做右滑返回手势配置时,可能会遇到的 问题 ...

  3. IOS设置导航栏返回按钮,并添加事件返回主页面

    IOS设置导航栏返回按钮,并添加事件返回主页面 前提是已经push了一个viewController了.才能使用. XXXTableViewController 里面书写 - (void)viewDi ...

  4. ios开发返回按钮消失_iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决...

    我相信针对每一个iOS开发者来说~除了根视图控制器外~所有的界面通过导航栏push过去的界面都是可以通过右滑来返回上一个界面~其实~在很多应用和APP中~用户已经习惯了这个功能~然而~作为开发者的我们 ...

  5. ios7自定义返回按钮后,右滑返回功能失效解决方法

    ios7自定义返回按钮后,右滑返回功能失效解决方法 -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //开 ...

  6. iOS 右滑返回失效问题终极解决方案

    iOS 的右滑返回是必不可少的一项功能,否则用户体验会大打折扣,但是会经常会碰到某些页面右滑返回失效的情况,下面记录一下解决各种情况下右滑返回失效的方法: 1. 自定义返回按钮 如果页面上是自定义的返 ...

  7. iOS app 右滑返回

    前提条件,存在A和B两个页面,A是主界面,A push 到 B 方法一:如果B页面的返回按钮要用自定义的按钮(在iOS7中,如果使用了UINavigationController,那么系统自带的附加了 ...

  8. 禁用导航栏的右滑返回实现全屏手势返回

    今天发现项目中push 的也面的右滑都无法pop 查阅相关资料发现 导航栏右滑手势失效基本有两种情况 1: self.navigationController.interactivePopGestur ...

  9. App开发流程之右滑返回手势功能续

    上一篇记录了利用系统私有变量和方法实现右滑返回手势功能:http://www.cnblogs.com/ALongWay/p/5893515.html 这篇继续记录另一种方案:利用UINavigatio ...

最新文章

  1. VC6.0制作OCX并web调用 .
  2. Win32 串口编程(四)
  3. IoT -- (五) IoT都有哪些通信协议
  4. postgresql集群方案hot standby 安装和测试
  5. Java中多实现接口的一个好处
  6. 9day条件语句和基本数据类型
  7. Linux之系统信息操作20170330
  8. Qt Embedded性能优化详解
  9. Spine 3.8.75 导入Unity报错
  10. Android实现Twitter登录分享
  11. excel数据导入mysql
  12. linux查看docker是否启动命令行,如何通过命令行查看docker服务是否已启动
  13. numpy数组中元素单个选取或部分选取
  14. leetcode java 大厂基础面试题附答案(四)
  15. Linux中su无法切换到目录,linux普通用户su root切换提示没有文件或目录的解决方法...
  16. javascript-arguments.callee的作用
  17. [渲染层错误] ./pages/component/form.wxml not found
  18. windows下ITIM admin API开发环境配置,部署至tomcat
  19. 基于PHP的快递查询免费开放平台案例-快宝开放平台
  20. ERROR: Cannot determine archive format of /tmp/pip-req-build-2uc6o_he 解决方案

热门文章

  1. 加息造成的定期存款转存临界点!
  2. 系统权限控制设计001---RBAC用户角色权限设计方案
  3. 【C#编程基础学习笔记】6---变量的命名
  4. Ipimage 转mat
  5. 杭电1556 Color the ball
  6. 杭电1872稳定排序
  7. 利用jsp和servlet,MySQL实现简易报表
  8. Eclipse安装aptana
  9. 简历职称 计算机,简历中专业职称是什么
  10. mac php配置和扩展,mac 下安装php 以及 配置扩展!!!!!