计时器-验证码相关(以忘记密码为例)
1.点击发送验证码,要判断phoneTF是否空白以及手机号码是否正确,两个条件满足,next
2.点击发送验证码,开始进行倒计时
随机生成验证码的方法
NSString* strRandom = @"";
for(int i=0; i < 6; i++)
{
strRandom = [ strRandom stringByAppendingFormat:@"%i",(arc4random() % 9)];
}
NSLog(@"%@",strRandom);
开始进行请求,开始进行请求的同时,生成计时器,进行验证码秒数的倒计时
@property (nonatomic, assign) int runLoopTimes;
@property (nonatomic, strong) NSTimer * unregisteredTimer;
self.unregisteredTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(runLoop) userInfo:nil repeats:YES];
// 倒计时
- (void)runLoop
{
验证码按钮.userInteractionEnabled = NO;//设置按钮点一次开始倒计时之后,就不能再次点击
_runLoopTimes++;
[验证码按钮 setTitle:[NSString stringWithFormat:@"%d秒", 60-_runLoopTimes] forState:UIControlStateNormal];
if (_runLoopTimes == 60)
{
[_unregisteredTimer invalidate];
验证码按钮.userInteractionEnabled = YES;
_runLoopTimes = 0;
//random=nil;
[验证码按钮 setTitle:@"重新发送" forState:UIControlStateNormal];
验证码按钮.titleLabel.font = [UIFont systemFontOfSize:14];
}
}
手机收到验证码OK,next
3.正常流程,输入正确验证码输入密码,点击完成,修改密码成功
4.输入错误验证码情况
在秒数倒计时未走完之前,输入了错误的验证码,点击提交,系统提示,验证码错误的同时,需要停止验证码倒计时秒数,让验证码按钮回归重新发送字体。
如图,验证码按钮已经停止了计时器,也已经回归到了重新发送
//如果验证码请求失败,btn跳回到准备状态
[验证码按钮 setTitle:@"重新发送" forState:UIControlStateNormal];
[self.unregisteredTimer invalidate];
self.unregisteredTimer = nil;