行のボタンのクリックイベント

#import <UIKitの/ UIKit.h>
 に#define defaultInterval 0.5   // デフォルトの間隔
@interface UIButton(タッチ)
 / * *設定された時間間隔をクリックします* / 
@Property(非アトミック、ASSIGN)NSTimeInterval時間間隔; 
@end
#importを " UIButton +のtouch.h " 
の#import <にObjC / runtime.h> @interface UIButton()
 / * * BOOL类型设置是否执行点UI方法* / 
@property(非アトミック、割り当てる)BOOL isIgnoreEvent。@end @implementation UIButton(タッチ)
 +(ボイド)負荷{
     静的dispatch_once_t onceToken。
    dispatch_once(&onceToken、^ { 
        SEL SELA = @selector(sendAction:全forEvent :); 
        SEL SELB = @selector(mySendAction:全forEvent :); 
        方法methodA =    class_getInstanceMethod(自己、SELA)。




        方法methodB =class_getInstanceMethod(自己、SELB)。
       BOOL isAdd = class_addMethod(自己、SELA、method_getImplementation(methodB)、method_getTypeEncoding(methodB))。
        もし(isAdd){ 
            class_replaceMethod(自己、SELB、method_getImplementation(methodA)、method_getTypeEncoding(methodA))。
        } { 
            method_exchangeImplementations(methodA、methodB)。
        } 
    })。
}
 - (NSTimeInterval)時間間隔
{ 
    リターン[objc_getAssociatedObject(自己、_CMD)のdoubleValue]。
}
 - (ボイド)setTimeInterval:(NSTimeInterval)時間間隔
{
    objc_setAssociatedObject(自己、@selector(時間間隔)、@(時間間隔)、OBJC_ASSOCIATION_RETAIN_NONATOMIC)。
    
}
 - (ボイド)mySendAction:(SEL):(するアクションIDを forEventターゲット):(たUIEvent *)イベントを
{ 
    場合([。NSStringFromClass(自己クラス)isEqualToString:@ " UIButton " ]){
         場合(self.isIgnoreEvent == 0 ){ 
            self.timeInterval = defaultInterval。
        }。
        もし(self.isIgnoreEvent)リターンもし(self.timeInterval> 0 
        { 
            self.isIgnoreEvent = YES。
            [自己performSelector:@selector(setIsIgnoreEvent :) withObject:@(NO)afterDelay:self.timeInterval]。
        } 
        
    } 
    [自己mySendAction:アクションへ:ターゲットforEvent:イベント]。
    
}
 - (ボイド)setIsIgnoreEvent:(BOOL)isIgnoreEvent { 
    objc_setAssociatedObject(自己、@selector(isIgnoreEvent)、@(isIgnoreEvent)、OBJC_ASSOCIATION_RETAIN_NONATOMIC)。
}
 - (BOOL)isIgnoreEvent {
     戻り[objc_getAssociatedObject(自己、_CMD)BOOLVALUE]。
} 
@end
UIButton + touch.m

 

おすすめ

転載: www.cnblogs.com/kingstudy/p/11482285.html