#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
/// 防重复点击按钮
@interface DelayButton : UIButton
/// 创建防重复点击按钮
/// @param buttonType 按钮类型
/// @param delay 延迟时间
-
(instancetype)buttonWithType:(UIButtonType)buttonType delay:(NSTimeInterval)delay;
/// 创建防重复点击按钮(默认1s)
/// @param buttonType 按钮类型
- (instancetype)buttonWithType:(UIButtonType)buttonType;
@end
NS_ASSUME_NONNULL_END
#import "DelayButton.h"
static NSInteger kDefaultDelay = 1;
@interface DelayButton ()
@property (nonatomic, assign) NSTimeInterval delay;
@end
@implementation DelayButton
/// 创建防重复点击按钮
/// @param buttonType 按钮类型
/// @param delay 延迟时间
- (instancetype)buttonWithType:(UIButtonType)buttonType
delay:(NSTimeInterval)delay {
DelayButton *button = [super buttonWithType:(buttonType)];
button.delay = delay;
return button;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.delay = kDefaultDelay;
}
return self;
}
/// 创建防重复点击按钮(默认1s)
/// @param buttonType 按钮类型
- (instancetype)buttonWithType:(UIButtonType)buttonType {
return [self buttonWithType:buttonType delay:kDefaultDelay];
}
- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { self.userInteractionEnabled = NO;
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
weakSelf.userInteractionEnabled = YES;
});
[super sendAction:action to:target forEvent:event];
}
@end