UINavigationController滑动返回
来源:互联网 发布:黄酒分类 知乎 编辑:程序博客网 时间:2024/05/10 18:22
最近做了UINavigationController的滑动返回(IOS7及以后系统默认支持的), 主要分成以下几步以及碰到的问题, 我这里做个总结:
这里是将interactivePopGestureRecognizer.delegate赋给self. 这样便可以实现滑动, 因为enabled默认是YES.
在push的时候关闭手势, 这样就不用担心会激活滑动
在判断当前为rootController, 设置手势无效, 而且必须设置delegate为nil, 这样的话就可以解决卡死的问题了.
*.首先说明个普遍碰到的问题
网上普遍看到说, 在UINavigationController下自定义leftBarButtonItem会导致滑动失效, 解决方案:http://blog.csdn.net/meegomeego/article/details/25879605
但我想告诉大家, 我也是自定义了leftBarButtonItem却没有碰到上述问题, 我是统一写了一个BaseViewController作为所有controller父类, 除了rootConrtoller, 这里不知为何, 有知道的可以留言.
排除上述原因, 下面介绍下怎么实现滑动:
1. 自定义UINavigationController(我写了个UIBaseNavigationController)以共用, 在ViewDidLoad里加入代码:
- (void)viewDidLoad{ [super viewDidLoad]; /* UINavigationControllerDelegate */ self.delegate = self; / swipe gesture / __weak typeof (self)weakSelf = self; if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {// self.interactivePopGestureRecognizer.enabled = YES; /* UIGestureRecognizerDelegate */ self.interactivePopGestureRecognizer.delegate = weakSelf; }}
这里是将interactivePopGestureRecognizer.delegate赋给self. 这样便可以实现滑动, 因为enabled默认是YES.
2. 在滑动过程中你会发现如果在pushViewController的动画过程中激活滑动手势会导致crash, 解决方案:
/ set gesture no when pushViewController /- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.enabled = NO; } [super pushViewController:viewController animated:animated];}
在push的时候关闭手势, 这样就不用担心会激活滑动
3. 自然, 在当你加载完成下一个viewController之后需要激活滑动手势:
/ set gesture yes when showViewController /- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated{ if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { navigationController.interactivePopGestureRecognizer.enabled = YES; }}
4. 当然, 你还会发现一个问题:在rootController下滑动的时候, 在想push到下一个页面会没有反应, 界面卡死在那了, 所以还需要在上述方法中加入以下代码:
/ set gesture yes when showViewController /- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated{ if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { navigationController.interactivePopGestureRecognizer.enabled = YES; } / if rootViewController, set delegate nil / if (navigationController.viewControllers.count == 1) { navigationController.interactivePopGestureRecognizer.enabled = NO; navigationController.interactivePopGestureRecognizer.delegate = nil; }}
在判断当前为rootController, 设置手势无效, 而且必须设置delegate为nil, 这样的话就可以解决卡死的问题了.
这样的话, 就可以完成navigationcontroller下的返回滑动了, 和微信一样一样滴~~~~~
1 0
- UINavigationController滑动返回
- UINavigationController滑动返回
- UINavigationController屏蔽滑动返回
- 重写UINavigationController实现滑动返回
- UINavigationController从右边缘也可滑动返回
- iOS UINavigationController的iOS 7的手势滑动返回功能
- UINavigationController侧滑滑动返回 卡死问题
- UINavigationController生成返回按钮
- UINavigationController 返回之前目录
- UINavigationController 返回总结
- UINavigationController 返回按钮修改
- UINavigationController返回两级
- iOS UINavigationController 返回总结
- uinavigationcontroller手势返回
- UINavigationController 右滑返回
- 系统UINavigationController的返回
- UINavigationController设置返回按钮
- UINavigationController 返回总结
- 想学JS的原型和闭包吗?COME ON(1)
- bug统计分析初步
- 纯粹跟风,用PHP下妹子图
- Spring缓存注解@Cache使用
- C#调用ORACLE存储过程返回结果集及函数
- UINavigationController滑动返回
- android 字体
- sql之left join、right join、inner join的区别
- LeetCode136——Single Number
- Android Fragment 真正的完全解析(上)
- Rac sequence
- 浅析服务器语言跟客户端语言的区别
- 导入android工程问题解决
- .Net 开源项目集锦