【转】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];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在上家公司做项目的时候,做了个60秒获取验证码的功能,当时做了个定时器,按钮触发定时器,逻辑来讲都是没问题的,但是...
    George2016阅读 8,920评论 0 4
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • 12-国宝大熊猫 从都江堰的堰功亭回到青年旅社,时间不长,大家一路说说笑笑,非常轻松。夏天九点多,都江堰市的夜...
    潇湘心河黎阅读 2,839评论 0 2
  • 日有阴晴,月有圆缺,人世间的万事万物, 都有着不为人轻易所识的另一面。曾经有一位乡下女人, 当丈夫得了不治之症撒手...
    王虎林阅读 1,592评论 0 1
  • 2018-8-21来自李翔知识内参的分享☞在工作和生活中,我们都会面临一些不情愿却只能勉强或被迫答应的请求,答应之...
    霜霜微记阅读 936评论 0 0