iOS点击获取短信验证码按钮

作者: smile丽语 | 来源:发表于2016-08-12 15:42 被阅读4961次

在APP开发中,点击获取验证码的倒计时按钮 是在注册、修改密码、绑定手机号等场景中使用!在项目中,多次使用这个按钮,现自定义一个简单的获取短信验证码倒计时功能。

获取短信验证码.png

如果需要,可以直接拿走这个自定义的按钮ZLVerifyCodeButton,只需要调用方法即可,也可以在自定义里按照自己需求去更改按钮的UI。

由于有些时间需求不同,特意露出方法,倒计时时间次数:

- (void)timeFailBeginFrom:(NSInteger)timeCount;

自定义获取验证码按钮:

- (void)setup {
    
    [self setTitle:@" 获取验证码 " forState:UIControlStateNormal];
    self.titleLabel.font = [UIFont systemFontOfSize:10];
    self.backgroundColor = [UIColor clearColor];
    self.layer.cornerRadius = 3.0;
    self.clipsToBounds = YES;
    [self setTitleColor:ZLColor(128, 177, 34) forState:UIControlStateNormal];
    self.layer.borderColor = ZLColor(128, 177, 34).CGColor;
    self.layer.borderWidth = 1.0;
}

倒计时方法:

- (void)timeFailBeginFrom:(NSInteger)timeCount {

    self.count = timeCount;
    self.enabled = NO;
    // 加1个计时器
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:nil repeats:YES];
}

计时器方法:

- (void)timerFired {
    if (self.count != 1) {
        self.count -= 1;
        self.enabled = NO;
        [self setTitle:[NSString stringWithFormat:@"剩余%ld秒", self.count] forState:UIControlStateNormal];
  //      [self setTitle:[NSString stringWithFormat:@"剩余%ld秒", self.count] forState:UIControlStateDisabled];
    } else {
        
        self.enabled = YES;
        [self setTitle:@"获取验证码" forState:UIControlStateNormal];
 //        self.count = 60; 
        [self.timer invalidate];
    }
}

在你所需要的控制器里调用这个短信验证码按钮即可:
1)初始化创建设置相关按钮属性

// 获取验证码按钮
@property (nonatomic, weak) ZLVerifyCodeButton *codeBtn;

// 获取验证码按钮
ZLVerifyCodeButton *codeBtn = [ZLVerifyCodeButton buttonWithType:UIButtonTypeCustom];
// 设置frame 这里我是按照自己需求来
codeBtn.frame = CGRectMake(codeField.width - codeBtnW - marginX, 10, codeBtnW, 30);
[codeBtn addTarget:self action:@selector(codeBtnVerification) forControlEvents:UIControlEventTouchUpInside];
[self.codeField addSubview:codeBtn];
self.codeBtn = codeBtn;

2)调取后台接口,获取短信验证码处理相关其他逻辑

// 获取验证码点击事件
- (void)codeBtnVerification {
    
    // 调用短信验证码接口
    // 用户输入的验证码数字传给server,判断请求结果作不同的逻辑处理,根据自己家的产品大大需求来即可....
    // if (请求成功且匹配成功验证码数字){
      [self.codeBtn timeFailBeginFrom:60];  // 倒计时60s
  } else {
            [self.codeBtn timeFailBeginFrom:1]; // 处理请求成功但是匹配不成功的情况,并不需要执行倒计时功能
  }
}

这样就OK了,可以测试看下呦~

效果图

由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑!

相关文章

  • iOS点击获取短信验证码按钮

    在APP开发中,点击获取验证码的倒计时按钮 是在注册、修改密码、绑定手机号等场景中使用!在项目中,多次使用这个按钮...

  • 三种验证码

    一.数字短信验证码 思路: a.两个文本框+一个获取验证码按钮,文本框用来输入手机号和获取到的验证码,按钮负责点击...

  • Android开发之自动填充短信验证码

    笔者发现在很多应用中,都有自动获取验证码的功能:点击获取验证码按钮,收到短信,当前应用不需要退出程序就可以获取到短...

  • Flutter布局锦囊---验证码倒计时

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: “获取验证码按钮”,可以通过点击按钮来获取验证码。 然后...

  • jquery短信验证码倒计时效果

    1. 点击发送短信验证码 按钮点击后禁用及倒计时60s

  • iOS 倒计时效果的实现

    // 添加定时器 // 倒计时操作 // 定时器的销毁 点击按钮获取验证码 注意:如果获取验证码的按钮是通过sb ...

  • 2021-12-07 Flutter iOS快捷键入短信重复2次

    问题场景: 在登录界面获取验证码短信时点击 键盘上方点击快捷输入短信验证码 会输入两次验证码. 解决方案1:限制输...

  • iOS 短信验证码倒计时按钮的实现

    验证码倒计时按钮的应用是非常普遍的,本文介绍了IOS实现验证码倒计时功能,点击获取验证码,进入时间倒计时,感兴趣的...

  • IOS倒计时按钮实现思路及Demo

    前言 最近因为项目中涉及到短信获取验证码功能,并且获取验证码按钮需要显示倒计时功能,同时当从获取验证码界面在倒计时...

  • React-Native中使用验证码倒计时的按钮

    开发过程中有获取手机验证码的场景,这时候有这样的要求:1,点击“获取验证码”的按钮,发起获取验证码的网络请求,同时...

网友评论

  • 咩仔o:这个 点击Home按键。倒计时怎么停了?
  • _王大王:你好,我在你GitHub里面没有看到这个demo啊,请问哪里可以看到啊?
    smile丽语:@_王大王 有的,同名称
  • 石玉龙:- (void)timerFired:(NSTimer *)timer; // timer参数带上要更严谨
  • 石玉龙:你好,我在点击获取验证码按钮的时候,倒计时的计时速度看上去是正常的,但是当网络请求返回数据完成后,我会将验证码按钮恢复到“获取验证码”的状态,这个时候再次点击后,就发现计时器快速的-1,请问是什么问题了?
  • ec00457831f1:发现了一个Bug,获取验证码按钮在第二次点击的时候会有一秒钟显示的是剩余1秒
    经分析,问题出在这行代码
    [self setTitle:[NSString stringWithFormat:@"剩余%ld秒", self.count] forState:UIControlStateDisabled];
    这行代码作者将State设为了UIControlStateDisabled
    而这行代码
    [self setTitle:@"获取验证码" forState:UIControlStateNormal];
    确设置的是Normal。
    猜想应该是Disable状态下的获取1秒的标题缓存没有被清空
    所以再次按下按钮的时候会有问题

    解决方法 将那行代码改为
    [self.RegsistView_GetCodeButton setTitle:[NSString stringWithFormat:@"剩余%ld秒", self.RegsistView_Count] forState:UIControlStateNormal];
    self.RegsistView_GetCodeButton.enabled=NO;
    即可
    smile丽语:@Gxj 谢谢你啊:smile::+1:
  • 269777d7d4c7:谢谢分享,请问有Demo吗?
    smile丽语:@书签123 亲,你看下这篇文章:http://www.cocoachina.com/ios/20161028/17877.html
    书签123:我是一名初学者,有个问题想请教
    [self.timer invalidate];
    为什么,后面没写self.timer=nil;不会出现野指针?引用计数虽然为零,但内存地址中还是占着吧?
    smile丽语:@老鼠爱上加肥miao 可以直接拿走这个自定义的按钮ZLVerifyCodeButton,只需要调用方法即可
  • 7538bd4d932a:挺好 挺实用
  • 83445de57a78:不错哦
    smile丽语:@jzj 谢谢,对你有帮助就好
  • HoyaWhite:退到后台这个倒计时应该会暂停的吧 - -
    smile丽语:@水户洋平_Psist 等会试试看下,谢谢
    水户洋平_Psist:@smile丽语 暂停了 只是暂停之前走了3秒
    smile丽语:@WhitePlimsolls 退到后台倒计时没有暂停的
  • 我唔知啊:谢谢分享
    smile丽语:@我唔知啊 对你有帮助就好:smile:
  • YungFan:不错哦
    smile丽语:@YungFan 谢谢:smile:

本文标题:iOS点击获取短信验证码按钮

本文链接:https://www.haomeiwen.com/subject/qenssttx.html