UIButton防止多次点击

不多bb,直接上干货

#import NS_ASSUME_NONNULL_BEGIN@interface UIControl (EventInterval)/// 按钮响应间隔 @property (nonatomic, assign) NSTimeInterval eventInterval; @endNS_ASSUME_NONNULL_END

#import "UIControl+EventInterval.h" #import static char *const eventIntervalKey = "eventIntervalKey"; static char *const eventUnavailableKey = "eventUnavailableKey"; static NSTimeInterval const defaultEventInterval = 0; @interface UIControl ()@property (nonatomic, assign) BOOL eventUnavailable; @end@implementation UIControl (EventInterval)+ (void)load { Method method = class_getInstanceMethod(self, @selector(sendAction:to:forEvent:)); Method gf_method = class_getInstanceMethod(self, @selector(gf_sendAction:to:forEvent:)); method_exchangeImplementations(method, gf_method); }#pragma mark - ActionFun - (void)gf_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { if ([self isKindOfClass:[UIButton class]]) { if (self.eventUnavailable == NO) { self.eventUnavailable = YES; [self gf_sendAction:action to:target forEvent:event]; [self performSelector:@selector(setEventUnavailable:) withObject:@(NO) afterDelay:self.eventInterval > 0 ? self.eventInterval : defaultEventInterval]; } } else{ [self gf_sendAction:action to:target forEvent:event]; } }#pragma mark - setter & getter - (NSTimeInterval)eventInterval { return [objc_getAssociatedObject(self, eventIntervalKey) doubleValue]; }- (void)setEventInterval:(NSTimeInterval)eventInterval { objc_setAssociatedObject(self, eventIntervalKey, @(eventInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC); }- (BOOL)eventUnavailable { return [objc_getAssociatedObject(self, eventUnavailableKey) boolValue]; }- (void)setEventUnavailable:(BOOL)eventUnavailable { objc_setAssociatedObject(self, eventUnavailableKey, @(eventUnavailable), OBJC_ASSOCIATION_RETAIN_NONATOMIC); }@end

    推荐阅读