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

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


模擬GIF.gif

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

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

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

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

#pragma mark - UITabBarControllerDelegate

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

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

//監(jiān)聽(tīng)點(diǎ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 見(jiàn)鏈接:http://www.itdecent.cn/p/f6caf5fb1ef3

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

在viewDidLayoutSubviews中加上

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

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

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

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