场景:快速多次点击cell跳转到另一个页面,另一个页面被push多次。
原因:push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面正好在reloadData卡住主线程。造成点击cell时卡住了。
解决方法:在基类导航控制器中重写导航控制器的push方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #import "ZDBaseNavigationController.h"
@interface ZDBaseNavigationController ()<UINavigationControllerDelegate> @property (nonatomic, getter=isPushing) BOOL pushing; @end
@implementation ZDBaseNavigationController
- (void)viewDidLoad { [super viewDidLoad];
self.delegate = self; }
#pragma mark - Push - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if (self.isPushing) { NSLog(@"拦截多次push同一个VC"); return; } else { self.pushing = YES; } [super pushViewController:viewController animated:animated]; }
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { self.pushing = NO; }
|