思路: 在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 }