处理UITabBarController双击事件

因业务功能的需要,要处理UITabBarController的某个item的双击事件。 查看了一下UITabBarController的属性和方法,发现并没有提供类似的功能,于是动手写一个。

实现思路

  1. 给TabBarItem添加手势
    但后来发现UITabBarItem 只是一个NSObject ,是不可以添加手势的,只有UITabBar可以。

  2. 给UITabBar添加手势
    双击后是可以收到事件,但要计算点击的点的位置是不是在当前选中的Item上,感觉有点麻烦,

  3. 通过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 就可以了。

你可能感兴趣的:(处理UITabBarController双击事件)