原文链接

自定义返回按钮保留系统滑动返回手势.gif

1.简介

使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使用导航栏push出一个控制器,我们在控制器中自定义了一个返回按钮.这样系统默认的滑动返回手势效果就没有了.

2.解决方法

[1]从A这个控制器push到B这个控制器,我们想要自定义B的返回按钮,我们可以在A中设置

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"王俨" style:UIBarButtonItemStylePlain target:nil action:nil];

[2]在B控制器设置返回按钮,我想这应该是大多数人喜欢的选择,可是当我们在B控制器中设置self.navigationItem.leftBarButtonItem后发现系统的滑动返回手势失效了.那么如何可以保留系统的滑动返回手势了,我们可以B控制器中这样做.

@interface ViewController () <UIGestureRecognizerDelegate>
@end @implementation ViewController {
id<UIGestureRecognizerDelegate> _delegate
} - (void)viewDidLoad {
[super viewDidLoad]; // 自定义返回按钮
UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
[button setTitle:@"王俨2" forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
} - (void)back:(UIButton *)button {
[self.navigationController popViewControllerAnimated:YES];
} - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; if (self.navigationController.viewControllers.count > 1) {
// 记录系统返回手势的代理
_delegate = self.navigationController.interactivePopGestureRecognizer.delegate;
// 设置系统返回手势的代理为当前控制器
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
} - (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated]; // 设置系统返回手势的代理为我们刚进入控制器的时候记录的系统的返回手势代理
self.navigationController.interactivePopGestureRecognizer.delegate = _delegate;
} #pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return self.navigationController.childViewControllers.count > 1;
} - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return self.navigationController.viewControllers.count > 1;
}
@end

iOS 自定义返回按钮,保留系统滑动返回的更多相关文章

  1. iOS彩票项目--第五天,新特性引导页的封装、返回按钮的自定义、导航控制器的滑动返回以及自定义滑动返回功能

    一.上次实现了在AppDelegate中通过判断app版本决定是否进入新特性页面,今天将AppDelegate中的一坨进行了封装.将self.window的根控制器到底应该为新特性界面,还是主页面,封 ...

  2. ios 自定义导航栏,开启侧滑返回手势

    自定义一个常用ListViewController .h文件 #import <UIKit/UIKit.h> @interface ListViewController : UIViewC ...

  3. vux, vue如何控制微信自带的返回按钮,让其返回其他页面?

    <script> import { mapState } from 'vuex' export default{ name: 'clockFx', data () { return { } ...

  4. iOS自定义一个仿网易左右滑动切换页面框架

    FSScrollContentView github:https://github.com/shunFSKi/FSScrollContentView 这是本人在整理项目时抽离了业务代码整理封装的一个通 ...

  5. 拦截iOS系统导航栏返回按钮事件-三种方法

    方法一:在dealloc里面书写监听事件,因为只有pop才会调用dealloc,push不会掉用 - (void)dealloc {YLLog(@"123"); } 方法二:在- ...

  6. 再谈iOS 7的手势滑动返回功能

    本文转载至 http://blog.csdn.net/jasonblog/article/details/28282147  之前随手写过一篇<使用UIScreenEdgePanGestureR ...

  7. 转载 iOS拦截导航栏返回按钮事件的正确方式

    原文链接:http://www.jianshu.com/p/25fd027916fa 当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮 ...

  8. iOS拦截导航栏返回按钮事件的正确方式

    当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...

  9. iOS拦截导航栏返回按钮事件的正确方式(二)

    当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...

随机推荐

  1. Request.ServerVariables 参数大全

    Request.ServerVariables("Url") 返回服务器地址 Request.ServerVariables("Path_Info") 客户端提 ...

  2. int (*p)[4] 与 int* p[4]

    碰到一道题: ][] = {,,,,,,,,,,,}; ]; ] = (a+); cout<<*(p+)<<endl; cout<<(*ptr+)[]<< ...

  3. HDU 5228

    #include<stdio.h> #include<string.h> *]; int main(){ int t; scanf("%d",&t) ...

  4. mysql 设置可以外部访问

    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;   --授权可以外部 ...

  5. tab切换,滑动门

    <SCRIPT type=text/javascript>  jQuery(document).ready(function () {          changediv([" ...

  6. 教你搭建SpringSecurity3框架( 更新中、附源码)

    源码下载地址:http://pan.baidu.com/s/1qWsgIg0 一.web.xml <?xml version="1.0" encoding="UTF ...

  7. hough变换检测线和圆

    参考:http://blog.163.com/yuyang_tech/blog/static/21605008320130233343990/ 这篇介绍的基本思想. http://www.cnblog ...

  8. am335x 电容屏驱动添加。

    参考:http://www.cnblogs.com/helloworldtoyou/p/5530422.html 上面可以下载驱动. 解压后驱动有如下目录: 我们要选择的是: eGTouchARM/e ...

  9. CodeVS 1344 线型网络

    Sol 随机化算法+哈密顿路径. 好厉害的题...首先都会想到状压DP对吧,复杂度 \(O(n^2 2^n)\) . \(n=20\)  exm?? \(10^8\) 有一种算法就是随机化算法 再调整 ...

  10. 7.4---加法替代运算(CC150)

    注意:1,除法那里b+=b是错的.b一直在改变.   2,仔细一点. import java.util.*; public class AddSubstitution { public int cal ...