iOS開發之TabBar再次點擊實現刷新

需求

以前已經實現了自定義TabBar,如圖所示:bash

如今須要實現一個相似今日頭條TabBar的功能 —— 若是繼續點擊當前TabBar的選中項,那麼該界面須要刷新UITableView。ide

分析

既然已經自定義了TabBar,那麼最簡單的就是在自定義中給TabBar中須要的UITabBarButton添加事件 —— 點擊就發送通知,而且將當前的索引傳出去。對應的界面監聽通知,拿到索引比對,若是和當前索引一致,就執行對應的操做。post

實現

  1. 自定義TabBar的layoutSubviews中綁定事件
- (void)layoutSubviews
{
    
    [super layoutSubviews];
    for (UIButton * tabBarButton in self.subviews) {
            
        if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
            
            //監聽tabbar的點擊
            //綁定tag 標識
            tabBarButton.tag = index;
            
            //監聽tabbar的點擊
            [tabBarButton addTarget:self action:@selector(tabBarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
            
        }
    }
}
複製代碼
  1. 監聽事件,發送通知
- (void)tabBarButtonClick:(UIControl *)tabBarBtn{
    
    //判斷當前按鈕是否爲上一個按鈕
    //再次點擊同一個item時發送通知出去 對應的VC捕獲並判斷
    if (self.previousClickedTag == tabBarBtn.tag) {
        
        [[NSNotificationCenter defaultCenter] postNotificationName:
         @"DoubleClickTabbarItemNotification" object:@(tabBarBtn.tag)];
    }
    self.previousClickedTag = tabBarBtn.tag;
}
複製代碼
  1. 對應的UIViewController監聽通知
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(doubleClickTab:) name:@"DoubleClickTabbarItemNotification" object:nil];
    
}
複製代碼
  1. 監聽到通知,比對後執行操做
-(void)doubleClickTab:(NSNotification *)notification{
    
    //這裏有個坑 就是直接用NSInteger接收會有問題 數字不對
    //由於上個界面傳過來的時候封裝成了對象,因此用NSNumber接收後再取值
    NSNumber *index = notification.object;
    
    if ([index intValue] == 1) {
        //刷新
    }
    
}
複製代碼
相關文章
相關標籤/搜索