- 最近网络环境比较差,测试APP的时候也出现了一些问题,例如:点击button需要跳转到另一个页面,点一次没反应,多点了几次,结果就连续push好多这个页面。
(BaseNavigationController 继承自UINavigationController,在所有使用导航栏的地方都使用BaseNavigationController,像修改返回按钮的样式,文字只需要在BaseNavigationController中进行修改,所有的地方都会被修改) - 最后解决了这个问题,在这里记录下,如有。
//在viewDidLoad中添加实现UINavigationControllerDelegate
-(void)viewDidLoad
{
[super viewDidLoad];
__weak BaseNavigationController *weakSelf = self;
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.delegate = weakSelf;
self.delegate = weakSelf;
}
}
- 实现协议方法
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
//这个方法是在当前控制器执行push的时候,禁止手势右划返回,避免出现crash的现象,(也可以不实现好像也没什么影响)
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.enabled = NO;
}
//判断上一个控制器和现在的控制器是不是同一个,如果是,返回。如果不是push到当前控制器,这就有效避免了同一个控制器连续push的问题
if ([self.topViewController isMemberOfClass:[viewController class]]) {
return;
}
[super pushViewController:viewController animated:animated];
}
- 如果实现了刚才的协议方法,禁止右划返回,就应该实现下面的协议方法,在控制器已经出现的时候,将右划返回打开。
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animate
{
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.enabled = YES;
}
}
希望能有帮助,看的懂。