iOS技巧:點擊tabBar實現(xiàn)當(dāng)前模塊刷新

實現(xiàn)功能:點擊tabBar,刷新當(dāng)前TableView,如圖:


模擬GIF.gif

方法一:
TabBar成為自己的代理,監(jiān)聽自己的點擊--這種方法不推薦,如果外面設(shè)置了代理會覆蓋里面的。

方法二:
既然找不到合適的控制器監(jiān)聽tabBar的點擊事件,那就讓AppDelegate來做代理,接收到點擊事件后,通過通知中心發(fā)送通知:
第一步:

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

再實現(xiàn)UITabBarControllerDelegate代理方法,拋出通知,

#pragma mark - UITabBarControllerDelegate

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

第二步:哪個控制器需要,就監(jiān)聽發(fā)出的通知。tableView所在的視圖控制器需要響應(yīng)點擊tabBar,所以在該控制器中監(jiān)聽發(fā)出的通知, 然后調(diào)用刷新方法. --注意:記錄上次選中的控制器,判斷本次點擊是否與上次一樣,并且是否為當(dāng)前顯示的控制器。

//監(jiān)聽點擊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://m.itdecent.cn/p/f6caf5fb1ef3

到這里,點擊tabBar實現(xiàn)當(dāng)前模塊刷新已實現(xiàn),但還有一個小問題,APP啟動后,初始主頁的控制器需要點擊兩次才能刷新,這是因為加載主頁控制器相當(dāng)于點擊了一次tabBar,然而實際并沒有點擊,此時self.lastVC為nil,需要第二次點擊才能刷新。這里提供一種方法,暫時沒有想到更好的方法。

在viewDidLayoutSubviews中加上

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    if (!self.lastVC) {
        self.lastVC = self.tabBarController.selectedViewController;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,835評論 4 61
  • 半個月后,我和老孟互相以各自的新樓房做抵押擔(dān)保,分別借到寶貴的十萬元資金。這事我沒有跟合伙人孫院長說,上一次因為理...
    斜哥觀點閱讀 375評論 0 1
  • 終于我們上了火車。車廂里已經(jīng)坐滿了乘客。因為是過路車,我們又是換乘,只能買到站票。母親拉著我,艱難的跨過或坐...
    就愛嗑瓜子閱讀 328評論 2 4
  • 也不知道誰翻譯的這電影名稱;要是不耐下心來看,你很容易錯過這部不錯的電影;伊恩是一個研究眼睛的科學(xué)家;在一次萬圣節(jié)...
    Jcomey閱讀 995評論 0 2

友情鏈接更多精彩內(nèi)容