iOS解决按钮短时间内多次点击只触发一次事件方法

在上家公司做项目的时候,做了个60秒获取验证码的功能,当时做了个定时器,按钮触发定时器,逻辑来讲都是没问题的,但是实际操作的时候,恶意的在短时间内多次点击那个获取验证码按钮,按钮的点击事件被调用了多次,定时器从而也调用多次,本来一秒减一的事件变成了一秒减多,并且减到0后继续调用方法,直到响应点击次数调用完,这完全不符合我们的心意。 时隔2月,我在新公司工作了,回头来看这个问题,为了解决这个问题,我在百度上查了许多资料,解决后将解决办法写入自己的博客,和大家分享自己的技术,也为自己一直想写博客做个开始,记录开发中遇到的问题,慢慢成长。

好了,废话讲完,开始进入主题: 1.一个60秒获取验证码的功能,先写好了按钮,在触发按钮的方法中做如下操作:

-(void)getBtnAction:(UIButton *)btn{ //获取验证码按钮点击

// 在0.2秒时间间隔内多次点击只响应一次点击事件, todoSomething就是我们具体要实现的方法

[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:btn]; [self performSelector:@selector(todoSomething:) withObject:btn afterDelay:0.2f]; }

-(void)todoSomething:(UIButton *)btn{

//这里面写timer,timer调自己的方法

}

2.到这里就结束了,关键的就那一步:

[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:btn]; [self performSelector:@selector(todoSomething:) withObject:btn afterDelay:0.2f];

希望对大家有所帮助。

时间: 2024-10-20 06:17:32

iOS解决按钮短时间内多次点击只触发一次事件方法的相关文章

解决element组件input框的autofocus只触发一次

<i class="icon iconfont icon-edit-p" v-if="!editAtlasBool" @click="showInput"></i> <el-input v-if="editAtlasBool" :placeholder="newAtlasName" ref="atlas-name-input" v-model="a

react判断点击位置是否为组件内,实现点击外部触发组件内事件

1.导入 import {findDOMNode} from 'react-dom' 2.绑定ref <div ref="refTest" </div> 3.绑定监听事件 //监听外部click componentDidMount() { document.addEventListener('mousedown', (e)=>this.handleClickOutside(e), false); } componentWillUnmount() { docume

关于按钮在短时间内多次点击的问题.

在开发中,我们经常会写倒计时的功能,在解决按钮避免在短时间内多次点击的时候, 1.我们可以设置UIButton的enable属性,为NO,或者YES 2.还可以利用两个方法达到同样的效果,下面为代码. 可以很好地控制,几秒钟之后按钮点击才能执行方法. - (void)btnClick{ [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:self.

iOS 防止按钮快速点击造成多次响应的避免方法

有时候有些操作是防止用户在一次响应结束中再响应下一个.但有些测试用户就要猛点,狂点.像这种恶意就要进行防止. 当然有些异步操作时,可以在调用前enable 掉.等CallBACK 后再enable起来.过程中按钮是不能点的. 1.可以使用: - (void) timeEnough { UIButton *btn=(UIButton*)[self.view viewWithTag:33]; btn.selected=NO; [timer invalidate]; timer=nil; } - (v

iOS UIButton按钮

系统字体 + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; NSArray *fontNames; NSInteger indFamily, indFont; for (indFamily=0; indFamily<[familyNames count]; ++indFamily) {     NSLog(@"Fa

iOS中 按钮和标题完美各种排列/完美教程 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 前言:最近常常用到按钮和相应标题的组合,当按钮设置图片加标题时,触发范围较小,不易触发,最重要的是还要调试偏移量,相信研究过的开发者都很头疼这一点,那我我就想解决,于是在网上研究了一番,个人总结封装了一个,觉得很棒,推荐给大家! 下面看教程: 整体是对UIButton的自定义封装: //UIButton+UIButtonSetEdgeInsets.h #import <UIKit/UIKit.h> @inte

iOS中CollectionView由于多次点击造成错误的解决方案

iOS中CollectionCiew由于多次点击,会给程序造成错误. 这个时候,我们可以用过手势类来进行判断和过滤. 但是,有一个快捷的解决方法,那就是给用户响应增加延时操作. 具体代码如下: [collectionView setUserInteractionEnabled:NO]; [collectionView performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:

关于iOS UIWebView 加载网页,点击网页内某些控件导致 Application &#39;UIKitApplication:xxx.xxx.xxx&#39; was killed by jetsam.

问题:公司用的腾讯问卷系统,内嵌在我们应用或游戏的自定义UIWebView里面展示,发现在iOS 10 以下系统,点击圆形勾选框 会大概率出现闪退. 通过联调发现:报了这样一个警告Application 'UIKitApplication:xxx.xxx.xxx' was killed by jetsam. 然后没有更多的信息了. (连接真机调试,当发生闪退的时候,设备会同时跟Xcode断开连接,没有更多的错误堆栈,另外设备也没有记录下更多的Crash log 提供定位.) 最后从以下获取到近似

Flutter“不能热加载(hot reload),热重载按钮灰色且无法点击”的解决方案

前言,Flutter的热重载(hot reload)功能可以帮助您在无需重新启动应用的情况下快速.轻松地进行测试.构建用户界面.添加功能以及修复错误. 通过将更新后的源代码文件注入正在运行的Dart虚拟机(VM)中来实现热重载. 在虚拟机使用新的的字段和函数更新类后,Flutter框架会自动重新构建widget树,以便您快速查看更改的效果. 要热重载一个Flutter应用程序: 从受支持的IntelliJ IDE .Android Studio 或终端窗口运行应用程序.物理机或虚拟器都可以运行.