美文网首页iOS学习开发iOS DeveloperiOS收藏
iOS 登录时验证手机号和倒计时发送验证码问题

iOS 登录时验证手机号和倒计时发送验证码问题

作者: 谁遇而安 | 来源:发表于2016-10-26 11:30 被阅读370次

    我们做登录的时候经常会使用到,验证手机号是否正确、向手机发送验证码倒计时60s的问题,我们改如何解决呢?让我们一起来探讨一下吧。

    如下图:

    首先,我们先说说判断手机号码是否正确的问题吧,我的想法是给字符串添加一个分类,然后写上这样的代码:

    + (BOOL)valiMobile:(NSString *)mobile{

            if (mobile.length != 11){

                //判断手机号码是否为11位

                return NO;

                }else{

                    //使用正则表达式的方法来判断手机号

    /**

    * 移动号段正则表达式

      */

                    NSString *CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";

    /**

    * 联通号段正则表达式

    */

                     NSString *CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";

    /**

    * 电信号段正则表达式

    */

                    NSString *CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";

    //初始化NSPredicate对象

                    NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];

    //与具体对象进行筛选判断, 返回为BOOL值

                    BOOL isMatch1 = [pred1 evaluateWithObject:mobile];

                    NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];

                    BOOL isMatch2 = [pred2 evaluateWithObject:mobile];

                    NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];

                BOOL isMatch3 = [pred3 evaluateWithObject:mobile];

                    if (isMatch1 || isMatch2 || isMatch3) {

                        return YES;

                        }else{

                    return NO;

                }

            }

    }

    如果大家对于NSPredicate的用法有些疑问的话可以看看这篇文章:http://www.jianshu.com/p/d4098bc9488d

    下面再来说一说验证码倒计时的问题,

    1、我给button创建了一个分类

    2、设定button上的文字,并记录倒计时的总时长,然后开一个定时器,并且关闭button的点击事件

    3、定时器中将总时间缩减,并且设置button的文字,然后做一个判断,判断时间是否归为0,如果为0 就释放定时器,然后设置button上的文字,然后打开用户交互。

    代码如下:

    .h文件中

    #import@interface UIButton (BtnTime)

    /**

    按钮倒计时的问题

    @param countDownTime 倒计时的时间(分钟)

    */

    - (void)buttonWithTime:(CGFloat)countDownTime;

    @end

    .m文件中

    #import "UIButton+BtnTime.h"

    /** 倒计时的显示时间 */

    static NSInteger secondsCountDown;

    /** 记录总共的时间 */

    static NSInteger allTime;

    @implementation UIButton (BtnTime)

    - (void)buttonWithTime:(CGFloat)countDownTime {

    self.userInteractionEnabled = NO;

    secondsCountDown = 60 * countDownTime;

    allTime = 60 * countDownTime;

    [self setTitle:[NSString stringWithFormat:@"%lds后重新获取",secondsCountDown] forState:UIControlStateNormal];

    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeFireMethod:) userInfo:nil repeats:YES];

    }

    -(void)timeFireMethod:(NSTimer *)countDownTimer{

    //倒计时-1

    secondsCountDown--;

    //修改倒计时标签现实内容

    [self setTitle:[NSString stringWithFormat:@"%lds后重新获取",secondsCountDown] forState:UIControlStateNormal];

    //当倒计时到0时,做需要的操作,比如验证码过期不能提交

    if(secondsCountDown == 0){

    [countDownTimer invalidate];

    [self setTitle:@"重新获取" forState:UIControlStateNormal];

    secondsCountDown = allTime;

    self.userInteractionEnabled = YES;

    }

    }

    @end

    代码已经上传到github上去了,地址:https://github.com/zhangyqyx/Countdown

    希望大家能提出宝贵的意见,可以给我留言,也可以发邮件到我的邮箱:namezyqyx@163.com

    谢谢大家,如果你有更好的想法或文章请告知,不胜感激。

    相关文章

      网友评论

        本文标题:iOS 登录时验证手机号和倒计时发送验证码问题

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