setSelectedIndex 时tabbarVC里的didSelectViewController不执行?双击/单击tabbar刷新

近期项目里的双击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;
}

你可能感兴趣的:(setSelectedIndex 时tabbarVC里的didSelectViewController不执行?双击/单击tabbar刷新)