处理UITabBarController双击事件

作者: _Thinking_ | 来源:发表于2016-03-19 12:15 被阅读1034次

    因业务功能的需要,要处理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双击事件

      本文链接:https://www.haomeiwen.com/subject/poehlttx.html