iOS按钮防止连续点击 可以自己设置响应间隔
来源:互联网 发布:wow数据库7.0 编辑:程序博客网 时间:2024/05/01 05:36
来个地址 ,下载地址:https://github.com/strivever/UIButton-touch
为了博主防止删除,代码贴出来,开源不保证质量
//// UIButton+touch.h// LiqForDoctors//// Created by StriEver on 16/3/10.// Copyright © 2016年 iMac. All rights reserved.//#import <UIKit/UIKit.h>#define defaultInterval .5 //默认时间间隔@interface UIButton (touch)/**设置点击时间间隔*/@property (nonatomic, assign) NSTimeInterval timeInterval;@end
下面是.m文件 ,向下看
//// UIButton+touch.m// LiqForDoctors//// Created by StriEver on 16/3/10.// Copyright © 2016年 iMac. All rights reserved.//#import "UIButton+touch.h"@interface UIButton()/**bool 类型 YES 不允许点击 NO 允许点击 设置是否执行点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的实现 添加到系统方法中 也就是说 将 methodA方法指针添加成 方法methodB的 返回值表示是否添加成功 BOOL isAdd = class_addMethod(self, selA, method_getImplementation(methodB), method_getTypeEncoding(methodB)); //添加成功了 说明 本类中不存在methodB 所以此时必须将方法b的实现指针换成方法A的,否则 b方法将没有实现。 if (isAdd) { class_replaceMethod(self, selB, method_getImplementation(methodA), method_getTypeEncoding(methodA)); }else{ //添加失败了 说明本类中 有methodB的实现,此时只需要将 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); }//当我们按钮点击事件 sendAction 时 将会执行 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互换了,实际上执行 sendAction;所以不会死循环 self.isIgnoreEvent = YES; [self mySendAction:action to:target forEvent:event];}//runtime 动态绑定 属性- (void)setIsIgnoreEvent:(BOOL)isIgnoreEvent{ // 注意BOOL类型 需要用OBJC_ASSOCIATION_RETAIN_NONATOMIC 不要用错,否则set方法会赋值出错 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
0 0
- iOS按钮防止连续点击 可以自己设置响应间隔
- 利用runtime懒人实现iOS 防止按钮连续点击 连续响应事件,可以自己设置时间间隔,拖进工程中立即生效
- 利用RunTime Hook 实现iOS防止按钮连续响应点击
- 为按钮连续点击设置时间间隔
- Android 防止按钮响应连续点击
- Vickate_iOS_设置 UIButton 点击时间间隔,防止连续重复点击
- 防止按钮连续点击
- 防止按钮快速连续点击造成多次响应的方法
- Android防止按钮连续点击
- Android防止按钮连续点击
- Android防止按钮连续点击
- Android防止按钮连续点击
- Android防止按钮连续点击
- Android防止按钮连续点击
- Android防止按钮连续点击
- Android防止按钮连续点击
- iOS防止(按钮)UIButton多次点击造成多次响应
- iOS 防止按钮多次点击造成多次响应的方法
- 剑指offer代码解析——面试题23从上往下打印二叉树
- Android 离线缓存的快速实现
- opencv 改变图像对比度
- 日本公司就30名员工在泰群裸道歉,泰中日三国网友观点各异!丨暹罗猫佛牌
- doT.js 爱好者
- iOS按钮防止连续点击 可以自己设置响应间隔
- 找了很久的bug
- Android学习之 图解调用invalidate()和requestLayout()的过程
- 1010_数的计算
- 蓝桥杯入门训练 Fibonacci数列
- Bootstrap 引入 栅栏系统 文本 表格 类
- Hive开发经验问答式总结
- 使用echarts类库,在后台封装option,提供两种使用struts2传递参数到页面的方法
- OpenStack 峰会论文的视频