iOS页面右滑返回的实现方法总结
1.边缘触发的系统方法
①系统返回按钮
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
②自定义返回按钮
1. self.navigationController.interactivePopGestureRecognizer.enabled = YES; 2. self.navigationController.interactivePopGestureRecognizer.delegate = self;
在viewDidLoad里面加入这两行代码,遵循UIGestureRecognizerDelegate协议,当前的viewcontroller即可以实现该向右滑动后退功能,但是当回到navigationController的rootView中再次做出向右滑动时,程序会有问题(再次push子controller时,程序卡在当前界面无法跳转).有效解决方案如下:
说明:有两个controllerA,B
navigationController的rootview设置为A,在A中点击按钮后push B.在A的 -(void)viewDidAppear:(BOOL)animated方法中加入self.navigationController.interactivePopGestureRecognizer.enabled = NO;
2.全屏触发的自定义方法
2.1 自定义所有控制器的父类,在全屏范围内添加右滑手势,触发返回事件。
在viewDidLoad中,创建UIPanGestureRecognizer,并添加到导航栏控制器上。
- (void) viewDidLoad {
[super viewDidLoad];
//1.获取系统interactivePopGestureRecognizer对象的target对象
id target = self.navigationController.interactivePopGestureRecognizer.delegate;
//2.创建滑动手势,taregt设置interactivePopGestureRecognizer的target,所以当界面滑动的时候就会自动调用target的action方法。
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] init];
[pan addTarget:target action:NSSelectorFromString(@"handleNavigationTransition:")];
pan.delegate = self;
//3.添加到导航控制器的视图上
[self.navigationController.view addGestureRecognizer:pan];
//4.禁用系统的滑动手势
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
在滑动开始的触发事件中控制除了根视图控制器以外的所有控制器执行右滑事件。
#pragma mark - 滑动开始触发事件
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
//只有导航的根控制器不需要右滑的返回的功能。
if (self.navigationController.viewControllers.count <= 1) {
return NO;
}
return YES;
}
这种实现方法在一定程度上解决了问题,但有局限性。一是其触发是在所有次级控制器上作用,若部分控制器不需要该功能无法取消手势;二是在实际应用中可能导致手势冲突或因手指右滑停止而再返回原页面而引起错误或崩溃。
2.2 从底层入手,创建一个UINavigationController的分类(category),从根本上解决右滑返回的问题。
这一成果来自Github上forkingdog的开源项目,使用方法很简单,只需在你的项目中导入UINavigationController+FDFullscreenPopGesture这一分类,编译通过后即可实现全屏幕的右滑返回,若需在某一个页面取消事件,只需要引入UINavigationController+FDFullscreenPopGesture.h文件,然后在viewDidLoad方法中设置self.navigationController.fd_fullscreenPopGestureRecognizer.enabled = NO,并在上一个页面的viewWillAppear方法中设置self.navigationController.fd_fullscreenPopGestureRecognizer.enabled = YES,就可自如地控制各个页面的右滑返回效果实现与否。这一方法稳定而简便地解决了问题。
iOS页面右滑返回的实现方法总结的更多相关文章
- iOS系统右滑返回全局控制方案
前言 今天有个小需求,在点击导航条上的返回按钮之前要调用某个API,并弹出UIAlertView来显示,根据用户的选项判断是否是返回还是继续留在当前控制器.举个简单的例子,当点击导航条上的左上角返回按 ...
- iOS 开发 右滑返回上一级控制器
#import <objc/runtime.h> @interface UINavigationController (Transition)<UIGestureRecognizer ...
- iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决
我相信针对每一个iOS开发者来说~除了根视图控制器外~所有的界面通过导航栏push过去的界面都是可以通过右滑来返回上一个界面~其实~在很多应用和APP中~用户已经习惯了这个功能~然而~作为开发者的我们 ...
- SwipeBackLayout的使用方法,右滑返回
使用方法: 需要右滑返回的activity继承baseActivity就可以, 如: public class SettingActivity extends BaseActivity {} 为防止滑 ...
- ios7自定义返回按钮后,右滑返回功能失效解决方法
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //开启ios右滑返回 if ([ ...
- 第二十六篇、因为自定item(nav)而使系统右滑返回手势失效的解决方法
@interface ViewController () <uigesturerecognizerdelegate> @end@implementation ViewController ...
- App开发流程之右滑返回手势功能续
上一篇记录了利用系统私有变量和方法实现右滑返回手势功能:http://www.cnblogs.com/ALongWay/p/5893515.html 这篇继续记录另一种方案:利用UINavigatio ...
- App开发流程之右滑返回手势功能
iOS7以后,导航控制器,自带了从屏幕左边缘右滑返回的手势功能. 但是,如果自定义了导航栏返回按钮,这项功能就失效了,需要自行实现.又如果需要修改手势触发范围,还是需要自行实现. 广泛应用的一种实现方 ...
- 全新的手势,侧滑返回、全局右滑返回都OUT啦!
前言 Android快速开发框架-ZBLibrary 最近将以前的 全局右滑返回 手势功能改成了 底部左右滑动手势. 为什么呢?为了解决滑动返回手势的问题. 目前有3种滑动返回手势 一.侧滑返回 代表 ...
随机推荐
- tensorboard在windows系统浏览器显示空白的解决
一个简单的using_tensorboard.py程序,如下: #using_tensorboard.py import tensorflow as tf a = tf.constant(10,nam ...
- springMVC接收get请求传递多个参数
@RequestMapping(value = "/sendSignal/{state}/{limberId}/{account}", method = RequestMethod ...
- Android Measure 体系简单总结
Android对View的测量是半协商半强制半模糊半具体的. 测量过程中的两套尺寸体系: [半强制] ParentView**约束ChildView: **MeasureSpec(通过measure ...
- 梦想CAD控件文字COM接口知识点
一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...
- block:cfq 学习02
From: https://blog.csdn.net/vanbreaker/article/details/8308766 前文介绍了CFQ调度器的一些概念和结构之间的关系,这里再结合实际的代码,来 ...
- node事件循环和消息队列简单分析
node的好处毋庸置疑,事件驱动,异步非阻塞I/O,以及处理高并发的能力深入人心,因此大家喜欢用node做一些小型后台服务或者作为中间层和其他服务配合完成一些大型应用场景. 什么是异步? 异步和同步应 ...
- [NOIP2017普及]跳房子
我太弱了... 单调队列优化DP+二分答案. #include <algorithm> #include <iostream> #include <cstdlib> ...
- FTP配置
常用的匿名FTP配置项 anonymous_enable=YES 是否允许匿名用户访问 anon_umask=022 匿名用户所上传文件的权限 ...
- Yii 时间日期组件与composer 下载中出现的问题
首先本篇主要讲3点 一个Yii时间日期组件的两种用法 笔者使用composer下载该组件时出现问题的解决办法 1.composer下载出现的问题 file could not be downloade ...
- php正则表达式匹配html标签
用php正则表达式找出div标签,div允许多层嵌套,比如在以下文本中找出class为quizPutTag的div? <html> <head></head> &l ...