美文网首页
防止控件连续点击

防止控件连续点击

作者: JanetDong | 来源:发表于2018-11-23 19:18 被阅读2次

    在项目中有几个实际业务场景需要控制控件响应事件的时间间隔。比如:
    1、当通过点击按钮来执行网络请求时,若请求耗时稍长,用户往往会再点一次。这样,就执行了两次请求,造成了资源浪费。
    2、在移动终端性能较差时(比如iPhone 6升级到iOS 11😅),连续点击按钮会执行多次事件(比如push出来多个viewController)。
    3、防止暴力点击。

    比较好的解决方案是通过Runtime控制UIControl响应事件的时间间隔,直接上代码

        
        Method a = class_getInstanceMethod(self, @selector(sendAction:to:forEvent:));
        
        Method b = class_getInstanceMethod(self, @selector(__hyn_sendAction:to:forEvent:));
        
        method_exchangeImplementations(a, b);
        
    }
    
    - (void)__hyn_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
        
        if ([self.hyn_ignoreEvent boolValue]) return;
        
        if (self.hyn_acceptEventInterval > 0) {
            
            self.hyn_ignoreEvent = @(YES);
            
            [self performSelector:@selector(setHyn_ignoreEvent:) withObject:@(NO) afterDelay:self.hyn_acceptEventInterval];
            
        }
        
        if ([target respondsToSelector:action]) {
            [self __hyn_sendAction:action to:target forEvent:event];
        }
    }

    相关文章

      网友评论

          本文标题:防止控件连续点击

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