4566 开发笔记(2)修复快速重复点击 NavigationItem 导致的导航栈错乱问题
来源:互联网 发布:电脑软件怎么安装 编辑:程序博客网 时间:2024/05/22 17:48
又出 BUG 了
2015年的某一个晚上,项目老大 monkey test 下我的 4566 App,首页左上角有一个 NavigationItem,点击后将新建一个 XXViewController,然后 self.navigationController push XXViewController,如果快速重复点击这个 item ,就会出现 push 动画还没执行完,left navigation item 就恢复点击并响应,导致一个新的 XXViewController 被 push 了若干次。
另外,发现微信第二个Tab的添加好友 right navigation item 也有类似的问题,Coding.net客户端也有,还是乖乖做些防御行为吧。
怎么办?
为了避免对带有 NavigationItems 的 ViewController 逐个逐个改,要想一个全局的方法,目前想到的方法是:
目前我在项目中写了一个 UINavigationController 的子类 CRNavigationController,在初始化该类时设置 delegate 为 self,然后覆写 pushViewController:animated: 方法,在该方法中禁用 navigationBar,等 didShowViewController 后,再启用 navigationBar,代码如下:
@interface CRNavigationController () <UINavigationControllerDelegate>@end@implementation CRNavigationController#pragma mark - Init- (instance)init { // ... self.delegate = self; // ...}- (instance)initWithRootViewController:(UIViewController *)rootViewController { // ... self.delegate = self; // ...}#pragma mark - UINavigationControllerDelegate- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ self.navigationBar.userInteractionEnabled = YES;}- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { [super pushViewController:viewController animated:animated]; self.navigationBar.userInteractionEnabled = NO;}@end
可以把它放在 Base Navigation Controller 类中,防止全局出现这种问题。
0 0
- 4566 开发笔记(2)修复快速重复点击 NavigationItem 导致的导航栈错乱问题
- 两次快速点击导致的问题
- iOS开发--利用 runtime,解决多次点击相同 button,导致重复跳转的问题
- IOS修复两个导航栏状态不一致导致跳转时,导航栏黑底的问题
- tabbarcontroller+navigationcontroller 导航栏错乱的问题
- 导航栏navigationItem的使用
- IOS 判断导航栏navigationItem的按钮的箭头的点击事件
- 解决Toast快速点击,重复多次的问题
- 解决:防止页面按钮被重复点击,导致页面重复提交的问题
- iOS导航控制器使用interactivePopGestureRecognizer导致导航栏标题可能层次错乱的问题解决
- 导航navigationItem
- ListView滚动后内容重复的问题(Listview进度条,图片错乱的问题)
- sprintf ULONGLONG 导致格式化结果错乱的问题
- listview复用导致内容错乱的问题
- IE6,7 表格display:none导致表格错乱的问题
- ViewPager 懒加载 导致的数据错乱问题
- 解决RecyclerView删除Item导致位置错乱的问题
- iOS导航栏自定义按钮导致点击范围过大的问题
- 543. Diameter of Binary Tree 二叉树的直径
- 二分查找算法
- java编程思想读后感——10
- Android 网络库xutils(一)
- jQuery Mobile初识之一——页面基础
- 4566 开发笔记(2)修复快速重复点击 NavigationItem 导致的导航栈错乱问题
- python简单预测模型
- ORACLE报错:表不存在
- 华为OJ训练之0005-161228-找出连续最长数字串
- 4种必须知道的Android屏幕自适应解决方案
- Java设计模式《六》原型模式
- HTTP知识整理
- 用wireshark抓包分析tcp
- MCMC算法学习总结