美文网首页
swift 4.0 验证码按钮倒计时

swift 4.0 验证码按钮倒计时

作者: LX950124 | 来源:发表于2017-10-19 16:01 被阅读0次

根据网上的方法优化完善了一下。button样式如字体颜色、背景色没做说明,自行按需修改。


1:创建一个计时器

private var timer:Timer? //计时器


2:创建是否开始计时的Bool值

private var isCounting:Bool=false{ //是否开始计时

willSet(newValue) {

if newValue {

timer=Timer.scheduledTimer(timeInterval:1, target:self, selector:#selector(updateTimer(timer:)), userInfo:nil, repeats:true)

}else{

timer?.invalidate()

timer=nil

}

}

}


3:当前剩余秒数

private var remainingSeconds:Int=0{ //remainingSeconds数值改变时 江将会调用willSet方法

willSet(newSeconds) {

let seconds = newSeconds%60

sendVerifyCodeBtn.setTitle(NSString(format:"%02ds", seconds)asString, for:UIControlState.normal)

}

}//当前倒计时剩余的秒数


4:给发送验证码按钮添加点击事件

sendVerifyCodeBtn.addTarget(self, action:#selector(sendVerifyCode), for:UIControlEvents.touchUpInside)//添加验证码按钮点击事件


5:启动倒计时与时间更新的方法,在此写 倒计时期间 与 倒计时结束后 按钮的样式

//倒计时更新时间方法

@objc func updateTimer(timer:Timer) {

// 启动倒计时

//isCounting = true

ifremainingSeconds>0{

remainingSeconds-=1

sendVerifyCodeBtn.isEnabled=false

//sendVerifyCodeBtn.setTitle("重新获取", for: UIControlState.normal)

}

if remainingSeconds == 0 {

sendVerifyCodeBtn.setTitle ("重新获取", for:UIControlState.normal)

sendVerifyCodeBtn.isEnabled=true

isCounting = ! isCounting

timer.invalidate()

}

}


6:实现发送验证码按钮点击事件


//发送验证码按钮点击事件

@objc func sendVerifyCode() {

self.remainingSeconds=59

self.isCounting= !self.isCounting

}


如过不喜欢button计时时一闪一闪的效果,将button的type改为custom即可


注:文章在www.jianshu.com/p/87dc0b864898此文章基础上进行优化,

若有不足请大家指出,虚心接受。

相关文章

网友评论

      本文标题:swift 4.0 验证码按钮倒计时

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