iOS UI篇——Button连按处理防止按钮连续点击
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连按处理防止按钮连续点击相关推荐
- java button click事件_java处理按钮点击事件的方法
java处理按钮点击事件的方法 发布时间:2020-09-17 07:17:02 来源:脚本之家 阅读:70 作者:jingxian 不同的事件源可以产生不同类别的事件.例如,按钮可以发送一个Acti ...
- iOS开发UI篇——Button基础
一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状态 1. normal(普通状态) ...
- iOS UI篇——轮播图Banner图片动图混合无限轮播
KJBannerView 介绍一下自己之前写的无限轮播图库,无限自动循环滚动,大家有什么需求可以给我留言,持续更新中- Demo地址:KJBannerViewDemo 功能介绍 KJBannerVie ...
- android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...
先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...
- iOS SwiftUI篇-2 UI控件 Text Button Image List
iOS SwiftUI篇-2 UI控件 Text Button Image List Text 显示文本,相当于UILabel import SwiftUIstruct TextContentView ...
- iOS开发UI篇—transframe属性(形变)
iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...
- iOS开发UI篇—多控制器和导航控制器简单介绍
iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...
- iOS超全开源框架、项目和学习资料汇总(1)UI篇
上下拉刷新控件 **1. ** MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.(推荐) ...
- iOS超全开源框架、项目和学习资料汇总:UI篇
2017-01-30 iOS巍 CocoaChina 原文 上下拉刷新控件 1. MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉 ...
最新文章
- 谷歌“升维打击”:还原任意角度光照立体效果,2D变“4D”!
- android面试题总结加强
- 10.2.2 选择器
- php 栈、 出栈、入栈
- C#实验报告 类与对象的访问性:银行账户存取款、新建账户、查询余额
- Avalonia跨平台入门第二十一篇之玩耍CEF
- Linux中实现远程登录Xshell和Xftp
- java视频压缩 lz4_一种视频序列帧的压缩方法、解压方法及装置与流程
- transition:background-color .3s 背景色 - 渐变效果
- 最新版 | 李沐《动手学深度学习》中文版pdf重磅开源!
- fx系列微型可编程控制器 通信_西门子系列资料(64本电子书+PLC视频+软件),整理了很久...
- 组合逻辑电路的分析与设计
- RDkit:介绍smiles编码,smart编码及摩根指纹(ECFP)
- 南航计算机系复试内容,2010年南航计算机专业复试真题
- USB接口定义详解(图)
- 用主机搭建本地服务器局域网
- html注册页面带验证码,登陆注册-带图片的验证码
- 推荐 10 个好用的 JavaScript 代码压缩工具
- C Primer Plus 第十章学习总结……2015.4.30
- linux系统相关文件夹讲解,Linux中重要文件夹介绍PPT课件