iOS技巧:点击tabBar实现当前模块刷新

实现功能:点击tabBar,刷新当前TableView,如图:


模拟GIF.gif

方法一:
TabBar成为自己的代理,监听自己的点击--这种方法不推荐,如果外面设置了代理会覆盖里面的。

方法二:
既然找不到合适的控制器监听tabBar的点击事件,那就让AppDelegate来做代理,接收到点击事件后,通过通知中心发送通知:
第一步:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    tabBarController.delegate = self;
}

再实现UITabBarControllerDelegate代理方法,抛出通知,

#pragma mark - UITabBarControllerDelegate

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"TabRefresh" object:nil userInfo:nil];
}

第二步:哪个控制器需要,就监听发出的通知。tableView所在的视图控制器需要响应点击tabBar,所以在该控制器中监听发出的通知, 然后调用刷新方法. --注意:记录上次选中的控制器,判断本次点击是否与上次一样,并且是否为当前显示的控制器。

//监听点击TabBar的通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabBarClick) name:@"TabRefresh" object:nil];


- (void)tabBarClick
{
    if (self.tabBarController.selectedViewController == self.lastVC && [self.view isShowingOnKeyWindow]) {
        [self.tableView.mj_header beginRefreshing];
    }
    
    self.lastVC = self.tabBarController.selectedViewController;
}

isShowingOnKeyWindow 见链接:http://www.jianshu.com/p/f6caf5fb1ef3

到这里,点击tabBar实现当前模块刷新已实现,但还有一个小问题,APP启动后,初始主页的控制器需要点击两次才能刷新,这是因为加载主页控制器相当于点击了一次tabBar,然而实际并没有点击,此时self.lastVC为nil,需要第二次点击才能刷新。这里提供一种方法,暂时没有想到更好的方法。

在viewDidLayoutSubviews中加上

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    if (!self.lastVC) {
        self.lastVC = self.tabBarController.selectedViewController;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • 半个月后,我和老孟互相以各自的新楼房做抵押担保,分别借到宝贵的十万元资金。这事我没有跟合伙人孙院长说,上一次因为理...
    斜哥观点阅读 312评论 0 1
  • 终于我们上了火车。车厢里已经坐满了乘客。因为是过路车,我们又是换乘,只能买到站票。母亲拉着我,艰难的跨过或坐...
    就爱嗑瓜子阅读 288评论 0 4
  • 也不知道谁翻译的这电影名称;要是不耐下心来看,你很容易错过这部不错的电影;伊恩是一个研究眼睛的科学家;在一次万圣节...
    Jcomey阅读 960评论 0 2