iOS 限制按钮的点击频率(Target-Action设计模式的运用)

简介: iOS 限制按钮的点击频率(Target-Action设计模式的运用)

引言

在项目开发中,会对数据库数据进行更新操作的接口请求,不仅服务器侧需要控制请求频率以及保证数据的唯一性和一致性,app侧也需要进行限制来避免产生垃圾数据

常用的方案有

1、限制按钮的点击频率: 针对注册类接口的时间间隔timeInterval可设置长些,推荐0.5s

2、新增标志对单个接口进行请求频率的控制

/**
 控制接口的请求标志
 */
@property (assign, nonatomic) BOOL IsreqingGetCurrentSysUser;

I、限制按钮的事件响应频率

image.png

1.1 原理分析

原理:利用runtime API 对UIControl方法sendAction:to:forEvent:进行方法实现的交换,来控制事件的响应频率

SEL selA = @selector(sendAction:to:forEvent:);

如果按钮的事件处理采用添加UITapGestureRecognizer 手势的实现的,同理也是可以类似地进行Method Swizzling实现响应频率的限制

UITapGestureRecognizer *cutTap = [[UITapGestureRecognizer alloc] init];
        [[cutTap rac_gestureSignal] subscribeNext:^(id x) {
            NSLog(@" cutTap 点击了 ");
            if ( self.models.block) {
                self.models.block(self.models);
            }
        }];
        [self addGestureRecognizer:cutTap];

倒计时巧妙地使用performSelector:withObject:afterDelay:实现

[self performSelector:@selector(resetState) withObject:nil afterDelay:self.timeInterval];//

1.2 代码实现

image.png

本文案例是采用分类的形式,你可以选择自定义控件的方式进行实现

头文件

#import <UIKit/UIKit.h>
#define defaultInterval .2  //默认时间间隔
@interface UIButton (touch)
/**设置点击时间间隔*/
@property (nonatomic, assign) NSTimeInterval timeInterval;
@end

从原文https://kunnan.blog.csdn.net/article/details/117352527查看完整部实现

1.3 使用和测试

使用:由于采用分类在UIButton的load进行方法交换,因此只要项目包含分类文件即可 测试:快速多次点击按钮

image.png

//一根或者多根手指离开view,系统会自动调用view的下面方法
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

II、知识储备:什么是响应者链?

iOS触摸事件:什么是响应者链?

https://kunnan.blog.csdn.net/article/details/74107917

iOS Target-Action设计模式的运用

https://kunnan.blog.csdn.net/article/details/108011011

see also


目录
相关文章
|
iOS开发
iOS MFMessageComposeViewController不显示取消按钮,导航条上白色,无取消按钮,无法返回应用...
iOS MFMessageComposeViewController不显示取消按钮,导航条上白色,无取消按钮,无法返回应用...
92 0
|
设计模式 测试技术 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
303 0
|
2月前
|
JavaScript 前端开发 iOS开发
ios样式开关按钮jQuery插件
ios样式开关按钮jQuery插件
58 7
|
5月前
|
iOS开发
iOS超出父控件范围无法点击问题
iOS超出父控件范围无法点击问题
151 58
|
3月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
94 1
|
4月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
78 5
|
5月前
|
iOS开发
iOS超出父控件范围无法点击问题
iOS超出父控件范围无法点击问题
|
9月前
|
iOS开发
iOS13.6.1系统XR手机图文按钮显示不全问题
iOS13.6.1系统XR手机图文按钮显示不全问题
86 0
|
9月前
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
按钮的image图片是非圆角,直接对UIButton设置圆角,iOS13系统没有圆角效果的问题及解决方案
65 0
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
331 0

热门文章

最新文章