思路: 在tabBarController的代理方法 shouldSelectViewController 中, 通過判斷tabBar選中的控制器是否是當前控制器 並 比對兩次點擊的時間間隔 來判斷是否是雙擊事件.
1. 先定義一個全局變量來記錄上次點擊的時間
1 @property (strong, nonatomic) NSDate *lastDate;
2. 實現代理方法中的事件
1 - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { 2 BESTBaseViewController *vc = tabBarController.selectedViewController; 3 4 NSDate *date = [[NSDate alloc] init]; 5 if ([vc isEqual:viewController]) { 6 // 處理雙擊事件 7 if (date.timeIntervalSince1970 - _lastDate.timeIntervalSince1970 < 0.5) { 8 POST_NOTIFY(NOTIFY_TABBAR_DOUBLE_CLICK, nil, nil) 9 } 10 _lastDate = date; 11 12 return NO; 13 } 14 return YES; 15 }
注: 在接收並實現通知方法的時候 需要注意過濾掉 三連擊或以上的點擊事件(可通過一個全局變量進行判斷過濾)
1 - (void)notifyTabBarDoubleClick:(NSNotification *)noti { 2 if (self.active) { 3 if (_canDoubleClick) { // 全局變量默認為YES 4 _canDoubleClick = NO; 5 6 [self queryHomeData]; 7 } 8 } 9 }
