// // UIControl+YT.m // CollectionViewTest // // Created by imac on 17/3/1. // Copyright © 2017年 xiang. All rights reserved. // #import "UIControl+YT.h" #import @implementation UIControl (YT) static const char *UIControl_acceptEventInterval = "UIControl_acceptEventInterval"; static const char *UIcontrol_ignoreEvent = "UIcontrol_ignoreEvent"; - (NSTimeInterval)yt_acceptEventInterval { return [objc_getAssociatedObject(self, UIControl_acceptEventInterval) doubleValue]; } - (void)setYt_acceptEventInterval:(NSTimeInterval)yt_acceptEventInterval { objc_setAssociatedObject(self, UIControl_acceptEventInterval, @(yt_acceptEventInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (BOOL)yt_ignoreEvent { return [objc_getAssociatedObject(self, UIcontrol_ignoreEvent) boolValue]; } - (void)setYt_ignoreEvent:(BOOL)yt_ignoreEvent { objc_setAssociatedObject(self, UIcontrol_ignoreEvent, @(yt_ignoreEvent), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } + (void)load { Method a = class_getInstanceMethod(self, @selector(sendAction:to:forEvent:)); Method b = class_getInstanceMethod(self, @selector(__yt_sendAction:to:forEvent:)); method_exchangeImplementations(a, b); } - (void)__yt_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { if (self.yt_ignoreEvent) return; if (self.yt_acceptEventInterval > 0) { self.yt_ignoreEvent = YES; [self performSelector:@selector(setYt_ignoreEvent:) withObject:@(NO) afterDelay:self.yt_acceptEventInterval]; } [self __yt_sendAction:action to:target forEvent:event]; } @end