美文网首页
UITabBarItem 双击事件

UITabBarItem 双击事件

作者: championfu | 来源:发表于2022-06-13 15:21 被阅读0次

业务需求:在选中某一Tab后,为其添加单击和双击事件(注意单击双击事件必须需独立,不能同时触发)

方案构思:
  • 方案一:利用图层分析工具和KVC在UITabBarItem上添加自定义View,然后在View分别添加单击和双击手势
    因为App原本使用的UITabBar,而UITabBarItem继承NSObject,因此必须通过图层分析工具获取UITabBarItem里面的UI对象的类名,然后用runtime和KVC添加或修改属性。但稍加思考后,放弃了这种方案,原因有二:第一、可能用到苹果私有API,审核被拒。第二、每一个版本的UITabBarItem的UI对象都可能有所改变,至少在iOS8,13,15这几个版本UITabBarItem的UI图层都略有改变。这样一来封装的代码非常麻烦,而且对于未来也iOS系统版本也有变数。

  • 方案二:直接在UITabBar上添加视图
    这种方案的确比方案一稳定,但从代码封装角度来说,非常丑陋。

  • 方案三:UITabBarControllerDelegate- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController中添加通知事件,利用触发的时间间隔来区分单击和双击事件
    通过研究发现,不论是在视图上添加手势还是利用时间间隔触发通知都有一个问题,就是双击事件事件没法脱离单击独立出现(因为第一次点击你是没法区分单双击的)
    这里涉及一个技巧,就是单击事件需要延迟执行,如果双击事件触发了,则将处于延迟等待的单击事件取消掉。代码如下

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    ///第二个item是你要处理单双击的情况
    ///tapTimestamp用于记录上一次点击的时间戳。
    ///doubleTapInterval是一个静态常量(我设置的为0.3)
    NSUInteger index = [tabBarController.viewControllers indexOfObject:viewController];
    if (index == 1 && tabBarController.selectedIndex == 1) {
        NSTimeInterval timestamp = CFAbsoluteTimeGetCurrent();
        if (timestamp - self.tapTimestamp < doubleTapInterval) {
            [self postDoubleTapNotification];
        }else {
            [self performSelector:@selector(postSingleTapNotification) afterDelay:doubleTapInterval];
        }
        self.tapTimestamp = timestamp;
        return NO;
    }
    return YES;
}

- (void)postSingleTapNotification {
    [NotiCenter postNotificationName:LSTabBarSingleTapNotification object:nil];
}

- (void)postDoubleTapNotification {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(postSingleTapNotification) object:nil];
    [NotiCenter postNotificationName:LSTabBarDoubleTapNotification object:nil];
}

相关文章

  • UITabBarItem 双击事件

    业务需求:在选中某一Tab后,为其添加单击和双击事件(注意单击双击事件必须需独立,不能同时触发) 方案构思: 方案...

  • 双击事件

    有些时候我们会遇到双击事件,如何设置双击事件。 在你的点击事件里写下一下判断 System.arraycopy(d...

  • 双击事件

    一、原理 1、布尔值 2、setTimeout() 二、实现代码 html: css: JavaScript: 三...

  • Android双击事件实现

    双击退出应用 双击响应事件 利用Handler控制点击事件

  • android_自定义多击事件

    自定义双击事件 点击事件:在控件上按下,离开,有瞬间的停留。 双击事件:在单位时间内,双击。 多击事件:在单位时间...

  • 常用事件

    鼠标事件 onclick 点击事件点击鼠标左键触发 ondblclick双击事件双击鼠标左键触发 onmouseo...

  • 双击打开网页

    双击事件

  • jQuery系列(四) -- 事件

    鼠标事件 .click() ==> 单击事件 .dblclick() ==> 双击事件 .mousedown() ...

  • 使用GestureDectector进行TextView、自定义

    参考Android中的双击事件使用如下代码对TextView进行双击监听,发现怎么也触发不了双击事件。 查阅资料之...

  • 实现html/js同时启用单双击事件

    在同一个dom元素同时启用了单击和双击事件时,双击会触发两次单击事件和一次双击事件,并且触发顺序是:单击1 -> ...

网友评论

      本文标题:UITabBarItem 双击事件

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