处理UITabBarController双击事件
2016-03-19 本文已影响1034人
_Thinking_
因业务功能的需要,要处理UITabBarController的某个item的双击事件。 查看了一下UITabBarController的属性和方法,发现并没有提供类似的功能,于是动手写一个。
实现思路
-
给TabBarItem添加手势
但后来发现UITabBarItem 只是一个NSObject ,是不可以添加手势的,只有UITabBar可以。 -
给UITabBar添加手势
双击后是可以收到事件,但要计算点击的点的位置是不是在当前选中的Item上,感觉有点麻烦, -
通过UITabBarControllerDelegate 根据时间间隔处理
第3种方法实现起来比较简单,而且也达到效果,下面看看代码
- (BOOL)checkIsDoubleClick:(UIViewController *)viewController
{
static UIViewController *lastViewController = nil;
static NSTimeInterval lastClickTime = 0;
if (lastViewController != viewController) {
lastViewController = viewController;
lastClickTime = [NSDate timeIntervalSinceReferenceDate];
return NO;
}
NSTimeInterval clickTime = [NSDate timeIntervalSinceReferenceDate];
if (clickTime - lastClickTime > 0.5 ) {
lastClickTime = clickTime;
return NO;
}
lastClickTime = clickTime;
return YES;
}
然后再看看UITabBarControllerDelegate的响应
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
if ([self checkIsDoubleClick:viewController]) {
[[NSNotificationCenter defaultCenter] postNotificationName:kDoubleClickTabItemNotification object:nil];
}
return YES;
}
需要处理的页面监听一下通知,然后简单判断一下 UITabBarController.selectedIndex 就可以了。