美文网首页
iOS技巧:点击tabBar实现当前模块刷新

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

作者: hudingyu | 来源:发表于2016-08-14 15:10 被阅读528次

    实现功能:点击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技巧:点击tabBar实现当前模块刷新

          本文链接:https://www.haomeiwen.com/subject/dqmysttx.html