近期项目里的双击tabbar的item刷新第一级页面的功能改成了单击就刷新,本以为仅仅是干掉一条判断就够了,然后并不如我所预期,出现了新bug、、、
当点击推送(LocalPush)时,做了些跳转,免不了切换tabbarVC的selectedIndex,调用tabbarVC的setSelectedIndex:
方法进行切换。
那么、问题就来了🤣,从新切换的tabbar.item下切换回刚才点击LocalPush时所在item的时候,会发送刷新通知。我的单击刷新都是在
if ([NSDate date].timeIntervalSince1970 - _lastTouchTime > 1 && [self.tabBar.selectedItem isEqual:_lastTabItem]) {
id vc = viewController.childViewControllers.firstObject;
if ([vc isKindOfClass:[XXXXViewController class]]) {
[[NSNotificationCenter defaultCenter] postNotificationName:k_XXXXDoubleTouchedNotif object:nil];
}
}
_lastTabItem = self.tabBar.selectedItem;
_lastTouchTime = [NSDate date].timeIntervalSince1970;
}
方法进行判断处理的,正常情况下是没问题的,此时的通知发送的就有点奇葩了;按理说,我都切换到了别的item,应该会执行_lastTabItem = self.tabBar.selectedItem;
这句话,然后事实打脸,记录的_lastTabItem还是上次的,这就很尴尬了。
本文唯一不是废话的一段😄
断点在didSelectViewController
代理方法,发现点Localpush时setSelectedIndex
执行结束并没有到断点,这就难怪没有干掉_lastTabItem了,既然知道了问题,那就想办法弥补呗!基于当前需求,直接重写下就行了:
- (void)setSelectedIndex:(NSUInteger)selectedIndex{
[super setSelectedIndex:selectedIndex];
_lastTabItem = nil;
}