zoukankan      html  css  js  c++  java
  • 按钮重复点击问题 UIbutton

    .h

    #import <UIKit/UIKit.h>

    #import <objc/runtime.h>

    @interface UIControl (XY)

     

    @property (nonatomic, assign) NSTimeInterval fy_acceptEventInterval;

    @property (nonatomic, assign) BOOL fy_ignoreEvent;

     

    @end

     

    .m

    //

    //  UIControl+XY.m

    //  Test

    //

    //  Created by xueshan on 17/7/3.

    //  Copyright © 2017 xueshan. All rights reserved.

    //

     

    #import "UIControl+XY.h"

     

    @implementation UIControl (XY)

     

    static const char *UIControl_acceptEventInterval = "UIControl_acceptEventInterval";

    static const char *UIControl_ignoreEvent = "UIControl_ignoreEvent";

     

    - (NSTimeInterval)fy_acceptEventInterval{

        return [objc_getAssociatedObject(self, UIControl_acceptEventInterval) doubleValue];

    }

    - (void)setFy_acceptEventInterval:(NSTimeInterval)fy_acceptEventInterval{

        objc_setAssociatedObject(self, UIControl_acceptEventInterval, @(fy_acceptEventInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

     

    - (BOOL)fy_ignoreEvent{

        return [objc_getAssociatedObject(self, UIControl_ignoreEvent) boolValue];

    }

     

    - (void)setFy_ignoreEvent:(BOOL)fy_ignoreEvent{

        objc_setAssociatedObject(self, UIControl_ignoreEvent, @(fy_ignoreEvent), OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

     

    + (void)load{

        Method a = class_getInstanceMethod(self, @selector(sendAction:to:forEvent:));

        Method b = class_getInstanceMethod(self, @selector(_fy_sendAction:to:forEvent:));

        method_exchangeImplementations(a, b);

    }

     

    - (void)_fy_sendAction:(SEL)selector to:(id)target forEvent:(UIEvent*)event{

        if (self.fy_ignoreEvent) return;

        

        if (self.fy_acceptEventInterval > 0) {

            self.fy_ignoreEvent = YES;

            [self performSelector:@selector(setFy_ignoreEvent:) withObject:@(NO) afterDelay:self.fy_acceptEventInterval];

        }

        

        [self _fy_sendAction:selector to:target forEvent:event];

    }

     

    @end

  • 相关阅读:
    synchronized锁机制 之 代码块锁(转)
    执行mvn 报错 source-1.5 中不支持 diamond运算符
    Git常用命令及场景
    mysql数据库导入与导出
    Linux磁盘空间分析及清理(df、du、rm)
    IIs配置文件存放路径
    解决SQLite database is locked
    C#测试web服务是否可用
    Jquery easyui-combobox 的一个BUG
    iframe自适应方法
  • 原文地址:https://www.cnblogs.com/daxueshan/p/7111258.html
Copyright © 2011-2022 走看看