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. 谷歌“升维打击”:还原任意角度光照立体效果,2D变“4D”!
  2. android面试题总结加强
  3. 10.2.2 选择器
  4. php 栈、 出栈、入栈
  5. C#实验报告 类与对象的访问性:银行账户存取款、新建账户、查询余额
  6. Avalonia跨平台入门第二十一篇之玩耍CEF
  7. Linux中实现远程登录Xshell和Xftp
  8. java视频压缩 lz4_一种视频序列帧的压缩方法、解压方法及装置与流程
  9. transition:background-color .3s 背景色 - 渐变效果
  10. 最新版 | 李沐《动手学深度学习》中文版pdf重磅开源!
  11. fx系列微型可编程控制器 通信_西门子系列资料(64本电子书+PLC视频+软件),整理了很久...
  12. 组合逻辑电路的分析与设计
  13. RDkit:介绍smiles编码,smart编码及摩根指纹(ECFP)
  14. 南航计算机系复试内容,2010年南航计算机专业复试真题
  15. USB接口定义详解(图)
  16. 用主机搭建本地服务器局域网
  17. html注册页面带验证码,登陆注册-带图片的验证码
  18. 推荐 10 个好用的 JavaScript 代码压缩工具
  19. C Primer Plus 第十章学习总结……2015.4.30
  20. linux系统相关文件夹讲解,Linux中重要文件夹介绍PPT课件

热门文章

  1. 对于小游戏2048代码具体讲解
  2. Python之tkinter图形界面设计学习二
  3. python爬虫开发教程-01-环境搭建
  4. Swiftlint代码规范属性说明
  5. 腾讯T3亲自讲解!Android开发者跳槽面试,建议收藏
  6. 什么是EBC和EBO
  7. 【编译原理】flex实现词法分析器
  8. as follows ,as follow following
  9. 请问如何将屏幕切换回主屏
  10. 亚马逊云创建Aws EC2示例+用Xshell7连接登录Aws+设置允许使用root登录