UIButton小技巧----点击事件时间间隔

2024-06-21 04:18

本文主要是介绍UIButton小技巧----点击事件时间间隔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UIButton小技巧—-点击事件时间间隔

起因

      在开发过程中对于UIbutton的点击事件,如果进行频繁的点击,可能会造成事件的不必要的重复执行事件,甚至造成不必要的错误。

解决方案

     通过添加Category,重写sendAction:to:forEvent:方法。(通过runtime交换系统的sendAction:to:forEvent: 和 自定义的customSendAction:to:forEvent:方法,在定义方法中进行时间判断是否符合时间间隔需求,不符合直接return否则在调用系统的sendAction:to:forEvent:)。

代码

#import <UIKit/UIKit.h>@interface UIButton (TimeInterval)@property NSTimeInterval repeatEventInterval;@end
#import "UIButton+TimeInterval.h"
#import <objc/runtime.h>const char *repeatEventIntervalKey  = "repeatEventIntervalKey";
const char *previousClickTimeKey = "previousClickTimeKey";@implementation UIButton (TimeInterval)+ (void)load {Method sendAction = class_getInstanceMethod([self class], @selector(sendAction:to:forEvent:));Method customSendAction = class_getInstanceMethod([self class], @selector(customSendAction:to:forEvent:));method_exchangeImplementations(sendAction, customSendAction);
}- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {[super sendAction:action to:target forEvent:event];
}- (void)setRepeatEventInterval:(NSTimeInterval)repeatEventInterval {objc_setAssociatedObject(self, repeatEventIntervalKey, @(repeatEventInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}- (NSTimeInterval)repeatEventInterval {return (NSTimeInterval)[objc_getAssociatedObject(self, repeatEventIntervalKey) doubleValue];
}- (void)setPreviousClickTime:(NSTimeInterval)previousClickTime {objc_setAssociatedObject(self, previousClickTimeKey, @(previousClickTime), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}- (NSTimeInterval)previousClickTime {return [objc_getAssociatedObject(self, previousClickTimeKey) doubleValue];
}- (void)customSendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {if ( NSDate.date.timeIntervalSince1970 - self.previousClickTime < self.repeatEventInterval ) {return;}if (self.repeatEventInterval > 0) {self.previousClickTime = NSDate.date.timeIntervalSince1970 ;}[self customSendAction:action to:target forEvent:event];
}@end

应用

#import "UIButton+TimeInterval.h"button.repeatEventInterval = 2;

这篇关于UIButton小技巧----点击事件时间间隔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080186

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的