有时候希望在页面退出之前做一些事情,但是发现除了 popViewController 方法外,有时候会使用侧滑返回。这个时候就需要捕捉侧滑返回的事件了。
创新互联服务项目包括绵竹网站建设、绵竹网站制作、绵竹网页制作以及绵竹网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,绵竹网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到绵竹省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
//苹果的api说明 与侧滑返回相关
在当前控制器中重写这两个方法就可以了。
1.第一次push进来的时候两个方法都会调用, parent的值不为空 。
2.当开始使用系统侧滑的时候,会先调用willMove, 而parent的值为空 ;
3.当滑动结束后返回了上个页面,则会调用didMove, parent的值也为空 ,如果滑动结束没有返回上个页面,也就是轻轻划了一下还在当前页面,那么则不会调用didMove方法。
想要在侧滑返回后在上个页面做一些操作的话,可以在didMove方法中根据parent的值来判断。
有个小需求是:从当前控制器侧滑返回时,要返回到指定控制器(如果没有指定要返回的控制器,就返回到根控制器),而不是上一个界面,如下做法是把指定控制器到当前控制器中间的控制器全部移除,然后在当前控制器触发返回时,都能回到指定控制器。以下方法在当前控制器直接调用一下,再传入要返回到的控制器即可,比如在viewDidLoad中,然后当触发系统的pop方法时就能回到该指定控制器。
//开启侧滑
1.第一次push进来的时候两个方法都会调用,parent的值不为空。
2.当开始使用系统侧滑的时候,会先调用willMove,而parent的值为空;
3.当滑动结束后返回了上个页面,则会调用didMove,parent的值也为空,如果滑动结束没有返回上个页面,也就是轻轻划了一下还在当前页面,那么则不会调用didMove方法。
当然,直接点击返回按钮,这两个方法也会调用。可以判断parent的值是否为空,进行具体的操作。
//开启侧滑
//关闭侧滑
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
}
非webview页面,使用第三方框架FDFullscreenPopGesture
链接戳这里: FDFullscreenPopGesture
webview页面(此处以WKWebview为例,self指代WKWebView所在的viewController)
1.禁用FDFullscreenPopGesture的侧滑返回手势
2.添加自定义手势
3.实现代理方法
介绍和属性中我们可以知道 interactivePopGestureRecognizer 是负责把Navigation 栈中最上面的View Controller推出去。而且它只能在iOS7.0及以上可以使用,并且禁止在TVOS中使用!
Like this:
像这样:
或者:
这里你也许会疑惑为什么我们上面用的是 UIScreenEdgePanGestureRecognizer 而不是 interactivePopGestureRecognizer ?
我们先打印 self.navigationController.interactivePopGestureRecognizer 结果为:
打印结果中我们看到了 UIScreenEdgePanGestureRecognizer :说明 interactivePopGestureRecognizer 其实由 UIScreenEdgePanGestureRecognizer 控制并执行 handleNavigationTransition: 其代理对象为 _UINavigationInteractiveTransition ,所以判断中我们使用了 UIScreenEdgePanGestureRecognizer .
我们可以根据 UIScreenEdgePanGestureRecognizer , handleNavigationTransition: 来自定义我们自己的侧滑返回,这章先讲诉到这里!
GitHub
今天教师节,祝天下所有教师:节日快乐!