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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 窗外走过一个卖火柴的小女孩,她没有穿鞋。 这么冷的天,这么大的雪,她怎么这么抗冻呢?到底是有怎样的利益诱惑使得...
    岍垣阅读 511评论 0 6
  • 今天从这个公司离开了,满打满算,十个月的时间,其实并不是很长,但是却让我印象深刻。 别的什么公司架构,制度和企业文...
    二公子2010阅读 195评论 0 0
  • 一般的大中型企业因为需要办公的人数较多,内部数据交换频繁,办公设备也比较多 以通常都会建有一个独立的机房,用于支撑...
    节能产阅读 917评论 0 0
  • 前一阵子外婆摔到腰后,就一直在住院接受治疗。这期间除了我妈,其他人没有一次陪过夜。这之间的缘由不说也罢,毕竟我妈是...
    薄荷一样的美好阅读 198评论 0 1