防止控件连续点击

在项目中有几个实际业务场景需要控制控件响应事件的时间间隔。比如:
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];
    }
}

你可能感兴趣的:(防止控件连续点击)