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

时间:2023-02-01 07:56:56
   在做项目的时候,做了个60秒获取验证码的功能,做了个定时器,按钮触发定时器,点击按钮后设置按钮的enabled为NO,逻辑来讲都是没问题的,但是实际操作的时候,恶意的在短时间内多次点击那个获取验证码按钮,按钮的点击事件被调用了多次,定时器从而也调用多次,本来一秒减一的事件变成了一秒减多,并且减到0后继续调用方法,直到响应点击次数调用完,这完全不符合我们的心意。
好了,废话讲完,开始进入主题:

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];

希望对大家有所帮助。