iOS验证码倒数计时60秒

计时3秒效果图
Untitled.gif
代码
//获取验证码
- (IBAction)getVerifiedCode:(UIButton *)sender
{
    //验证码倒数计时
    __block int leftTime = 60;
    sender.backgroundColor = UIColorFromHex(0xBDBDBD);
    [sender setTitle:[NSString stringWithFormat:@"%i秒", leftTime] forState:UIControlStateDisabled];
    sender.enabled = NO;
    [NSTimer bk_scheduledTimerWithTimeInterval:1 block:^(NSTimer *timer) {
        if (leftTime == 0) {
            sender.backgroundColor = UIColorFromHex(0xF48D2F);
            sender.enabled = YES;
            [sender setTitle:@"获取验证码" forState:UIControlStateNormal];
            //计时完成,销毁定时器
            [timer invalidate];
        }
        leftTime--;
        [sender setTitle:[NSString stringWithFormat:@"%i秒", leftTime] forState:UIControlStateDisabled];
    } repeats:YES];
}
  1. 使用了第三方库 BlocksKit,直接把控件需要调用或触发的方法写在block中。
    代码中这句 [NSTimer bk_scheduledTimerWithTimeInterval: block:] 是BlocksKit对NSTimer的分类中的方法,不仅如此,BlocksKit还有对UIButton、NSArray、NSDictionary...的block方法,十分强大。

  2. 用__block修饰leftTime,因为一般情况下,在block中是不能改变外部变量的值,但是在变量前用 __block 声明后就可以。

  3. 计时完成别忘了销毁定时器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1,NSObject中description属性的意义,它可以重写吗?答案:每当 NSLog(@"")函数中出现 ...
    eightzg阅读 9,650评论 2 19
  • 1.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令伟阅读 4,695评论 0 10
  • 一、jupyter notebook安装 二、生成密码hash值 1.使用jupyter命令生成: 创建密码后ha...
    hz_heng阅读 8,337评论 0 1
  • 强引用(Strong Reference):JVM宁愿抛出OOM,也不会让GC回收的对象 软引用(Soft Ref...
    Mr_不靠谱_先森阅读 3,604评论 0 0
  • 今天刚刚两个小时前把。大概。用母上大人的爪机上了下QQ。然后看见l先生给我发的十几条全是早安午安晚。然后看了下他空...
    我韩喜欢阅读 3,440评论 0 0