一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

iOS按鈕暴力點(diǎn)擊的便捷解決方案

 dxw121 2017-07-24

When the button Clicked continuously--iOS點(diǎn)擊事件分類(lèi)1.程序中大量按鈕沒(méi)有做連續(xù)響應(yīng)的校驗(yàn),測(cè)試人員連續(xù)點(diǎn)擊出現(xiàn)了很多不必要的問(wèn)題,所以只能利用運(yùn)行時(shí)特性,進(jìn)行hook一下。runtime不能大量使用,但是偶爾使用也是很方便的哈哈 gitHub鏈接 我的github,使用方法 去github下載一下 拖進(jìn)項(xiàng)目 立即生效,方便快捷哦
2.設(shè)置單個(gè)按鈕不需要hook
3.多次點(diǎn)擊按鈕,只執(zhí)行最后一次點(diǎn)擊事件,忽略前面的點(diǎn)擊時(shí)間

////  UIButton+touch.h//  LiqForDoctors////  Created by StriEver on 16/3/10.//  Copyright ? 2016年 iMac. All rights reserved.//#import#define defaultInterval .5  //默認(rèn)時(shí)間間隔

@interface UIButton (touch)

/**設(shè)置點(diǎn)擊時(shí)間間隔*/

@property (nonatomic, assign) NSTimeInterval timeInterval;

@end
//
//  UIButton+touch.m
//  LiqForDoctors
//
//  Created by StriEver on 16/3/10.
//  Copyright ? 2016年 iMac. All rights reserved.
//

#import "UIButton+touch.h"
@interface UIButton()
/**bool 類(lèi)型 YES 不允許點(diǎn)擊   NO 允許點(diǎn)擊   設(shè)置是否執(zhí)行點(diǎn)UI方法*/
@property (nonatomic, assign) BOOL isIgnoreEvent;
@end
@implementation UIButton (touch)
+ (void)load{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        SEL selA = @selector(sendAction:to:forEvent:);
        SEL selB = @selector(mySendAction:to:forEvent:);
        Method methodA =   class_getInstanceMethod(self,selA);
        Method methodB = class_getInstanceMethod(self, selB);
        //將 methodB的實(shí)現(xiàn) 添加到系統(tǒng)方法中 也就是說(shuō) 將 methodA方法指針添加成 方法methodB的  返回值表示是否添加成功
       BOOL isAdd = class_addMethod(self, selA, method_getImplementation(methodB), method_getTypeEncoding(methodB));
        //添加成功了 說(shuō)明 本類(lèi)中不存在methodB 所以此時(shí)必須將方法b的實(shí)現(xiàn)指針換成方法A的,否則 b方法將沒(méi)有實(shí)現(xiàn)。
        if (isAdd) {
            class_replaceMethod(self, selB, method_getImplementation(methodA), method_getTypeEncoding(methodA));
        }else{
            //添加失敗了 說(shuō)明本類(lèi)中 有methodB的實(shí)現(xiàn),此時(shí)只需要將 methodA和methodB的IMP互換一下即可。
            method_exchangeImplementations(methodA, methodB);
        }
    });
}
- (NSTimeInterval)timeInterval
{
    return [objc_getAssociatedObject(self, _cmd) doubleValue];
}
- (void)setTimeInterval:(NSTimeInterval)timeInterval
{
    objc_setAssociatedObject(self, @selector(timeInterval), @(timeInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}
//當(dāng)我們按鈕點(diǎn)擊事件 sendAction 時(shí)  將會(huì)執(zhí)行  mySendAction
- (void)mySendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event
{
    if ([NSStringFromClass(self.class) isEqualToString:@"UIButton"]) {

        self.timeInterval =self.timeInterval ==0 ?defaultInterval:self.timeInterval;
        if (self.isIgnoreEvent){
            return;
        }else if (self.timeInterval > 0){
            [self performSelector:@selector(resetState) withObject:nil afterDelay:self.timeInterval];
        }
    }
    //此處 methodA和methodB方法IMP互換了,實(shí)際上執(zhí)行 sendAction;所以不會(huì)死循環(huán)
    self.isIgnoreEvent = YES;
    [self mySendAction:action to:target forEvent:event];
}
//runtime 動(dòng)態(tài)綁定 屬性
- (void)setIsIgnoreEvent:(BOOL)isIgnoreEvent{
    // 注意BOOL類(lèi)型 需要用OBJC_ASSOCIATION_RETAIN_NONATOMIC 不要用錯(cuò),否則set方法會(huì)賦值出錯(cuò)
    objc_setAssociatedObject(self, @selector(isIgnoreEvent), @(isIgnoreEvent), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (BOOL)isIgnoreEvent{
    //_cmd == @select(isIgnore); 和set方法里一致
    return [objc_getAssociatedObject(self, _cmd) boolValue];
}
- (void)resetState{
    [self setIsIgnoreEvent:NO];
}
@end

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    91国内视频一区二区三区| 日本在线 一区 二区| 国产麻豆精品福利在线| 天海翼高清二区三区在线| 日韩欧美一区二区不卡视频| 欧美精品久久99九九| 精品国产91亚洲一区二区三区| 欧美激情区一区二区三区| 亚洲精品伦理熟女国产一区二区| 久久成人国产欧美精品一区二区| 免费精品国产日韩热久久| 久久中文字幕中文字幕中文| 中国少妇精品偷拍视频| 九九久久精品久久久精品| 国产午夜免费在线视频| 男人把女人操得嗷嗷叫| 久久精品国产亚洲熟女| 日韩精品第一区二区三区| 精品精品国产欧美在线| 日本熟妇熟女久久综合| 成人精品国产亚洲av久久| 亚洲国产精品av在线观看| 国产自拍欧美日韩在线观看| 亚洲欧美日韩国产综合在线| 亚洲午夜精品视频在线| 国产精品一区二区视频| 亚洲国产中文字幕在线观看| 午夜成年人黄片免费观看| 日韩女优视频国产一区| 九九视频通过这里有精品| 国产一区国产二区在线视频| 国产女优视频一区二区| 九七人妻一区二区三区| 亚洲av日韩一区二区三区四区| 国产午夜精品久久福利| 日本少妇aa特黄大片| 久久精品国产一区久久久| 黄色片国产一区二区三区| 亚洲天堂一区在线播放| 久久精品亚洲精品一区| 日韩人妻一区中文字幕|