swift 封装按钮倒计时
Posted cui-cui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 封装按钮倒计时相关的知识,希望对你有一定的参考价值。
在项目开发中经常需要用到倒计时的功能,比如注册部分获取验证码时,这里通过extension(UIButton)的方式来实现倒计时的功能
直接上代码
var codeTimer = DispatchSource.makeTimerSource(queue:DispatchQueue.global())
extension UIButton {
//倒计时启动
func countDown(count: Int){
// 倒计时开始,禁止点击事件
isEnabled = false
var remainingCount: Int = count {
willSet {
setTitle("(newValue)秒重发", for: .normal)
if newValue <= 0 {
setTitle("获取验证码", for: .normal)
}
}
}
if codeTimer.isCancelled {
codeTimer = DispatchSource.makeTimerSource(queue:DispatchQueue.global())
}
// 设定这个时间源是每秒循环一次,立即开始
codeTimer.scheduleRepeating(deadline: .now(), interval: .seconds(1))
// 设定时间源的触发事件
codeTimer.setEventHandler(handler: {
// 返回主线程处理一些事件,更新UI等等
DispatchQueue.main.async {
// 每秒计时一次
remainingCount -= 1
// 时间到了取消时间源
if remainingCount <= 0 {
self.isEnabled = true
codeTimer.cancel()
}
}
})
// 启动时间源
codeTimer.resume()
}
//取消倒计时
func countdownCancel() {
if !codeTimer.isCancelled {
codeTimer.cancel()
}
// 返回主线程
DispatchQueue.main.async {
self.isEnabled = true
if self.titleLabel?.text?.count != 0
{
self.setTitle("获取验证码", for: .normal)
}
}
}
}
在需要的地方直接调用即可
//启动倒计时
self.smsCodeBtn.countDown(count: 60)
//取消倒计时
self.smsCodeBtn.countdownCancel()
以上是关于swift 封装按钮倒计时的主要内容,如果未能解决你的问题,请参考以下文章
Swift - UITableViewCell倒计时重用解决方案