我相信针对每一个iOS开发者来说~除了根视图控制器外~所有的界面通过导航栏push过去的界面都是可以通过右滑来返回上一个界面~其实~在很多应用和APP中~用户已经习惯了这个功能~然而~作为开发者的我们~也并没有为此做些什么~因为我们在创建项目时~苹果公司已经为我们都做好了~那么~我们这期就来聊一聊这系统自带的右滑方法以及如何修改和拦截这个不被重视的方法~

什么时候会被拦截

当我们使用代码或者用storyboard来创建一个新的控制器的时候~我们很少注意导航栏的leftItem~因为正常情况下~push到下一个界面的leftItem就是上一个界面的self.title~并且它也就是一个返回的功能~所以~我们很少去在意这些~但当我们有些需求~需要自定义leftItem的时候~那么问题就来了~

问题一:怎么自定义leftItem

问题二:为什么系统自带的右滑返回手势失效

问题三:怎么解决这个失效问题

1.怎么自定义leftItem

其实~这个东西嘛~说简单也是很简单的~因为~我们很明确的知道~左导航栏就一个功能~那就是返回上一个界面~很显然~是需要用户交互的~必用按钮~

说多了都是废话~直接上代码~

//自定义一个按钮

UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setTitle:@"返回" forState:UIControlStateNormal];

[leftBtn addTarget:self action:@selector(backLastView) forControlEvents:UIControlEventTouchUpInside];

leftBtn.frame = CGRectMake(0, 0, 60, 40);

[leftBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

//将leftItem设置为自定义按钮

UIBarButtonItem *leftItem =[[UIBarButtonItem alloc]initWithCustomView: leftBtn];

self.navigationItem.leftBarButtonItem = leftItem;

//按钮点击事件 返回上一个界面

- (void)backLastView{

[self.navigationController popViewControllerAnimated:YES];

}

需要注意的是~xcode自动从6.0之后~leftItem距左屏幕边距有16个像素点~这样会导致在视觉上会感觉有点偏右~不算美观~然而对于大多数处女座的程序员来说~这明显是不能让人去接受的~解决办法有很多~在这里提供一个最为方便的方法~设置一下按钮的contentEdgeInsets(文字)imageEdgeInsets(图片)属性即可~如:leftButton.contentEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0);

2.为什么系统自带的右滑返回手势失效

这也是我一直所关系的问题~还希望知道的可以私信我~

笨笨编程官方微博

[http://weibo.com/2728581591/profile?rightmod=1&wvr=6&mod=personnumber]

qq:2638006336

3.怎么解决这个失效问题

其实很简单很简单~只需要添加下面这一句代码即可

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

其实到这里~问题应该都解决了~但是~毕竟右滑返回手势只能靠近屏幕左边缘才能使用~我们如何通过调用系统方法来实现在整个屏幕右滑就可以实现返回功能呢~

setp1:需要获取系统自带滑动手势的target对象

id target = self.navigationController.interactivePopGestureRecognizer.delegate;

setp2:创建全屏滑动手势~调用系统自带滑动手势的target的action方法

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];

step3:设置手势代理~拦截手势触发

pan.delegate = self;

step4:别忘了~给导航控制器的view添加全屏滑动手势

[self.view addGestureRecognizer:pan];

step5:将系统自带的滑动手势禁用

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

steo6:还记得刚刚设置的代理吗?下面方法什么时候调用?在每次触发手势之前都会询问下代理,是否触发。

这个方法就是拦截手势触发的方法.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{}

return NO;则不需要触发滑动手势

return YES;则需要触发滑动手势

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

  1. uni-app 自定义导航栏 图片按钮

    按钮据右边边框距离设置: document.getElementsByClassName('uni-btn-icon')[2].style.marginRight = '22px' 监听按钮状态: o ...

  2. IOS 自定义导航栏标题和返回按钮标题

    IOS中自定义导航栏标题: UILabel *titleText = [[UILabel alloc] initWithFrame: CGRectMake(160, 0, 120, 50)]; tit ...

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

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

  4. iOS 为自定义返回按钮的页面添加右滑返回

    2019独角兽企业重金招聘Python工程师标准>>> 苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationCo ...

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

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

  6. ios pan手势滑动消失动画_iOS左滑手势失效的解决方法

    iOS7之后,苹果优化了一个小功能,就是对于UINavagationController堆栈里的UIViewController,只要轻轻在视图控制器的左边缘右滑一下,该视图控制器就会pop出栈(前提 ...

  7. 苹果侧边滑动返回_iOS系统右滑返回手势问题及解决方案

    在iOS7之后,苹果推出了手势滑动返回功能,也就是从屏幕左侧向右滑动可返回上一个界面.大大提高了APP在大屏手机和iPad上的操作体验,场景切换更加流畅. 常见的问题有: 1.右滑手势失效 2.右滑手 ...

  8. 自定义导航栏左上角胶囊按钮返回、首页小房子

    示例项目地址:https://github.com/Shay0921/header-navbar 在小程序中,从转发出来的小程序消息卡片进入,因为页面栈中只有一个,所以不会出现返回按钮,对于一些电商平 ...

  9. Swift自定义导航栏返回按钮

    如何去除swift系统自带的导航栏返回按钮?可以自定义返回按钮 在swift中,怎么替换系统自带的导航栏返回按钮?比如说我要替换成一张返回按钮图片,点击返回到上一页 首先,看一下系统自带的导航栏返回按 ...

最新文章

  1. 2020-11-10(service入门)
  2. PHP安装wamp设置虚拟目录后,无法访问localhost问题
  3. ubuntu 中vi的使用方法
  4. 排序算法之low B三人组
  5. CGContextRef CIImageRef详解
  6. grace hopper_开源日,在Grace Hopper会议上建立FOSS技能
  7. echarts实用小技巧,控制字符串长度,限定整数等
  8. java9 多版本兼容jar_Java 9 多版本兼容 jar 包
  9. [20170623]利用传输表空间恢复数据库2.txt
  10. 线性代数矩阵思维导图_斌叔2021考研数学公式:几种特殊形式的矩阵
  11. 微信小程序支付封装-复制即用
  12. CART树算法的剪枝算法
  13. AlphaPose(RMPE)区域多人姿态估计理解
  14. SSH攻击ip列表【不定时更新】
  15. 判断火车票座位python代码_12306 火车票监控Python代码详解
  16. MP2888AGU-0030-Z 烧录
  17. QT绘制不规则多边形
  18. 手机保护壳让手机信号变更差?
  19. Springboot具有智能推荐功能的外卖点餐系统bia14计算机毕业设计-课程设计-期末作业-毕设程序代做
  20. RXSwift进阶:RXSwift的底层核心逻辑解析

热门文章

  1. 【堆叠抓取+深度学习】基于深度学习+PPO深度强化学习的堆叠物体抓取算法的MATLAB仿真
  2. Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)
  3. ios 原生骨架动画库
  4. NewLife.Net——管道处理器解决粘包
  5. 首个64层3D NAND闪存技术出现
  6. CentOS 7源码安装httpd服务
  7. 一些软件软件开发原则
  8. 发现qq的mac输入法2.8,在终端全屏下输入不显示待选文字或单词
  9. 科技日报头版显要位置报道国内多家企业投融资给力永中软件
  10. VS2010 SQL Server 2005 Database Project 使用笔记(二)