GitHub地址:KJEmitterView

需求介绍:
很多时候我们不希望按钮多次连按
如果我们去写Enabled略显麻烦
这里提供一种控制按钮点击间隔时间的方面
我已封装成类型,方便使用

h文件声明

/********************这两个属性互斥********************/
/** 接受点击事件的时间间隔 */
@property (nonatomic, assign) NSTimeInterval kj_AcceptEventTime;
/** 接受点击事件执行处理之后的时间间隔 */
@property (nonatomic, assign) NSTimeInterval kj_AcceptDealTime;
/********************这两个属性互斥********************/

m文件实现

+ (void)load {SEL originalSelector = @selector(sendAction:to:forEvent:);SEL swizzledSelector = @selector(kj_sendAction:to:forEvent:);Class class = [self class];Method originalMethod = class_getInstanceMethod(class, originalSelector);Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);if (class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) {class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));} else {method_exchangeImplementations(originalMethod, swizzledMethod);}
}- (NSTimeInterval)kj_AcceptEventTime{return [objc_getAssociatedObject(self, @selector(kj_AcceptEventTime)) doubleValue];
}
- (void)setKj_AcceptEventTime:(NSTimeInterval)kj_AcceptEventTime{objc_setAssociatedObject(self, @selector(kj_AcceptEventTime), @(kj_AcceptEventTime), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSTimeInterval)kj_AcceptDealTime{return [objc_getAssociatedObject(self, @selector(kj_AcceptDealTime)) doubleValue];
}
- (void)setKj_AcceptDealTime:(NSTimeInterval)kj_AcceptDealTime{objc_setAssociatedObject(self, @selector(kj_AcceptDealTime), @(kj_AcceptDealTime), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
/** 上一次时间 */
- (NSTimeInterval)kLastTime{return [objc_getAssociatedObject(self, @selector(kLastTime)) doubleValue];
}
- (void)setKLastTime:(NSTimeInterval)kLastTime{objc_setAssociatedObject(self, @selector(kLastTime), @(kLastTime), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
/// 交换方法后实现
- (void)kj_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event{if (self.kj_AcceptEventTime <= 0 && self.kj_AcceptDealTime <= 0) {[self kj_sendAction:action to:target forEvent:event];return;}// 时间间隔判断NSTimeInterval time = self.kj_AcceptEventTime > 0 ? self.kj_AcceptEventTime : self.kj_AcceptDealTime;BOOL boo = (NSDate.date.timeIntervalSince1970 - self.kLastTime >= time);// 保存上次点击时间if (self.kj_AcceptEventTime > 0) self.kLastTime = NSDate.date.timeIntervalSince1970;if (boo) {if (self.kj_AcceptDealTime > 0) self.kLastTime = NSDate.date.timeIntervalSince1970;[self kj_sendAction:action to:target forEvent:event];}
}
备注:本文用到的部分函数方法和Demo,均来自三方库**KJExtensionHandler**,如有需要的朋友可自行pod 'KJExtensionHandler'引入即可

Button处理介绍就到此完毕,后面有相关再补充,写文章不容易,还请点个**小星星**传送门

iOS UI篇——Button连按处理防止按钮连续点击相关推荐

  1. java button click事件_java处理按钮点击事件的方法

    java处理按钮点击事件的方法 发布时间:2020-09-17 07:17:02 来源:脚本之家 阅读:70 作者:jingxian 不同的事件源可以产生不同类别的事件.例如,按钮可以发送一个Acti ...

  2. iOS开发UI篇——Button基础

    一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状态 1. normal(普通状态) ...

  3. iOS UI篇——轮播图Banner图片动图混合无限轮播

    KJBannerView 介绍一下自己之前写的无限轮播图库,无限自动循环滚动,大家有什么需求可以给我留言,持续更新中- Demo地址:KJBannerViewDemo 功能介绍 KJBannerVie ...

  4. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  5. iOS SwiftUI篇-2 UI控件 Text Button Image List

    iOS SwiftUI篇-2 UI控件 Text Button Image List Text 显示文本,相当于UILabel import SwiftUIstruct TextContentView ...

  6. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  7. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  8. iOS超全开源框架、项目和学习资料汇总(1)UI篇

    上下拉刷新控件 **1. ** MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.(推荐) ...

  9. iOS超全开源框架、项目和学习资料汇总:UI篇

    2017-01-30 iOS巍 CocoaChina 原文 上下拉刷新控件 1. MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉 ...

最新文章

  1. Python之目录结构
  2. laravel安装笔记 (转)
  3. CSS特效(1)——css伪类实现表单验证样式
  4. Spring Boot 管理 MVC
  5. ps -ef grep java解释,ps -ef | grep java(示例代码)
  6. 【重难点】【JUC 03】怎么实现一个线程安全的队列、手写模拟实现一个阻塞队列
  7. PHP编码规范 代码样式风格规范
  8. c盘python27文件夹可以删除嘛_C盘里的空文件夹是不是都能删除啊
  9. Structs2-基础
  10. 关于计算机动画制作的过程,关于计算机制作动画的过程
  11. mysql上线脚本规范_专业规范的mysql启停脚本
  12. linux服务器默认使用中文字符集zh_CN.UTF-8
  13. 获得中国行政区划接口
  14. oracle数据库查看防火墙,Oracle数据库防火墙简介
  15. RAM汇编指令DMB、DSB、ISB、SEV等
  16. elasticsearch 数据类型
  17. 机器学习:《统计学习方法》笔记(一)—— 隐马尔可夫模型
  18. 如何在Excel中使用数据透视表计算百分比变化
  19. 0640-6.1.1-Hue上SQL查询结果显示不全异常分析-补充
  20. 示例程序GENERIC.H

热门文章

  1. Leetcode 逆波兰式表达式求值
  2. 关于SQL查询语句关键字
  3. Mysql中的varchar类型转换成int类型
  4. Android有关selinux详解
  5. PatchMatch算法详解(python代码实现)
  6. Java实现生成小程序码功能
  7. 01改变世界:现代计算机真正的鼻祖——超越时代的伟大思想
  8. android notifydatasetchanged 刷新错误,Android中适配器的notifyDataSetChanged()为何有时不刷新...
  9. 晚睡强迫症..其实真的有——医学上的真正名字叫拖延症
  10. java jndi配置_java(JNDI)