ios发送短信验证码计时器的swift实现
转载自:http://www.jianshu.com/p/024dd2d6e6e6#
Update: Xcode 8.2.1 Swift 3
先介绍一下 属性观测器(Property Observers):
属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外。
可以为属性添加如下的一个或全部观察器:
- willSet在新的值被设置之前调用
- didSet在新的值被设置之后立即调用
摘录来自: 极客学院. “The Swift Programming Language 中文版”。 iBooks.
接下来开始我们的教程,先展示一下最终效果:

首先声明一个发送按钮:
var sendButton: UIButton!
在viewDidLoad方法中给发送按钮添加属性:
override func viewDidLoad() {
super.viewDidLoad()
sendButton = UIButton()
sendButton.frame = CGRect(x: 40, y: 100, width: view.bounds.width - 80, height: 40)
sendButton.backgroundColor = UIColor.red
sendButton.setTitleColor(UIColor.white, for: .normal)
sendButton.setTitle("获取验证码", for: .normal)
sendButton.addTarget(self, action: #selector(ViewController.sendButtonClick(_:)), for: .touchUpInside)
self.view.addSubview(sendButton)
}
接下来声明一个变量remainingSeconds代表当前倒计时剩余的秒数:
var remainingSeconds = 0
我们给remainingSeconds添加一个willSet方法,这个方法会在remainingSeconds的值将要变化的时候调用,并把值传递给参数newValue:
var remainingSeconds: Int = 0 {
willSet {
sendButton.setTitle("验证码已发送(\(newValue)秒后重新获取)", forState: .normal)
if newValue <= 0 {
sendButton.setTitle("重新获取验证码", forState: .normal)
isCounting = false
}
}
}
当remainingSeconds变化时更新sendButton的显示文本。
倒计时的功能我们用Timer实现,先声明一个Timer实例:
var countdownTimer: Timer?
然后我们声明一个变量来开启和关闭倒计时:
var isCounting = false {
willSet {
if newValue {
countdownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.updateTime(_:)), userInfo: nil, repeats: true)
remainingSeconds = 10
sendButton.backgroundColor = UIColor.gray
} else {
countdownTimer?.invalidate()
countdownTimer = nil
sendButton.backgroundColor = UIColor.red
}
sendButton.enabled = !newValue
}
}
同样,我们给isCounting添加一个willSet方法,当isCounting的newValue为true时,我们通过调用Timer的类方法scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:创建并启动刚才声明的countdownTimer实例,这个实例每一秒钟调用一次updateTime:方法:
func updateTime(timer: Timer) {
// 计时开始时,逐秒减少remainingSeconds的值
remainingSeconds -= 1
}
当isCounting的newValue为false时,我们停止countdownTimer并将countdownTimer设置为nil。
此外我们还设置了倒计时的时间(这里为了演示时间设置为5秒)和发送按钮在不同isCounting状态下的样式(这里调整了背景色)和是否可点击。
最后实现sendButtonClick:方法,这个方法在点击sendButton时调用:
func sendButtonClick(sender: UIButton) {
// 启动倒计时
isCounting = true
}
完成!
Github地址:
https://github.com/GuiminChu/JianshuExample/tree/master/SMSSendButtonExample
ios发送短信验证码计时器的swift实现的更多相关文章
- 超实用的JavaScript代码段 Item4 --发送短信验证码
发送短信验证码 实现点击“发送验证码”按钮后,按钮依次显示为“59秒后重试”.“58秒后重试”…直至倒计时至0秒时再恢复显示为“发送验证码”.在倒计时期间按钮为禁用状态 . 第一步.获取按钮.绑定事件 ...
- Laravel5中使用阿里大于(鱼)发送短信验证码
在做用户注册和个人中心的安全管理时,我实现借助第三方短信平台(阿里大于(鱼))在Laravel框架中进行手机验证的设置:阿里大于,是阿里通信旗下优质便捷的云通信服务平台,整合了三大运营商的通信能力,为 ...
- 微信小程序发送短信验证码完整实例
微信小程序注册完整实例,发送短信验证码,带60秒倒计时功能,无需服务器端.效果图: 代码: index.wxml <!--index.wxml--> <view class=&quo ...
- java + maven 实现发送短信验证码功能
如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenzikj.com/doc/sdk.html ...
- android发送短信验证码并自动获取验证码填充文本框
android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com) ...
- iOS开发短信验证码封装 方便好用
---恢复内容开始--- 1.RootViewControler// Copyright © 2016年 Chason. All rights reserved.// #import "V ...
- java 阿里云接口实现发送短信验证码
此刻自己做的小项目中,需要用到手机发送短信验证码实现注册功能,于是就去阿里云注册了账号,并实现随机发送验证码的功能 第一步:在阿里云官网登录注册 已有支付宝或淘宝的账号可以直接登录,最后需要实名认 ...
- Java 实现手机发送短信验证码
Java 实现手机发送短信验证码 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ,之后想要在使用就得花钱了.简单的操作 ...
- Yii2发送短信验证码完全解决方案
概述 在做项目的时候,需要用到短信发送验证码功能.不能不说Yii2的牛逼,很容易就搞定了.下面我整理一下具体功能和流程,分享给大家. 主要功能 通过Yii2 rules验证手机号 通过js验证是否为手 ...
随机推荐
- Mybaits-从零开始-Spring、Spring MVC、MyBatis整合(未万待续)
Spring.Spring MVC.MyBatis整合(未万待续)
- 使用ImageIO.write上传二维码文件时候,提示系统找不到指定路径
报错如图所示: java.io.FileNotFoundException: E:\SF\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtp ...
- Shell之操作环境
目录 Shell之操作环境 参考 命令运行顺序 欢迎信息 环境配置 Shell之操作环境
- 【MySQL】java.sql.SQLException: The server time zone value
错误:Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: The se ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件
概述 在 <Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler> 中我们已经了解了 MessageHandler 的运行原理和使用方法 ...
- .net core运用application/x-www-form-urlencoded发起post请求
通常情况下都是使用 application/json发起post请求,但是有的.net 接口只接收 application/x-www-form-urlencoded 例如: { name:" ...
- RF作用与目的
robotframework自动化原理:通过ride工具编写脚本,加载指定的UI测试库,再通过pybot程序去运行指定脚本,调用浏览器驱动,打开浏览器,操作浏览器页面元素,达到模拟用户操作的行为 为什 ...
- 关于Stream的知识分享
一.什么是Stream 查了一下MSDN,他是这么解释的:提供字节序列的一般视图. 这个解释有点太笼统了,下面,我们来仔细的捋一下 1.什么是字节序列? 字节序列指的是:字节对象被存储为连续的字节序列 ...
- 渗透测试-基于白名单执行payload--Msiexec
复现亮神课程 基于白名单执行payload--Msiexec 0x01 关于msiexec Msiexec 是 Windows Installer 的一部分.用于安装 Windows Install ...
- Cymothoa后门工具
Cymothoa是一款隐秘的后门工具. 发现网上对于Cymothoa的文章并不是很多,可是Cymothoa又是一款非常强大的后门工具,这里记录下Cymothoa的使用笔记. Cymothoa 是一款可 ...