在開端之前,我們先來懂得一個概念 屬性不雅測器(Property Observers):
屬性不雅察器監控和呼應屬性值的變更,每次屬性被設置值的時刻都邑挪用屬性不雅察器,乃至新的值和如今的值雷同的時刻也不破例。
可認為屬性添加以下的一個或全體不雅察器:
接上去開端我們的教程,先展現一下終究後果:
起首聲明一個發送按鈕:
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.redColor()
sendButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
sendButton.setTitle("獲得驗證碼", forState: .Normal)
sendButton.addTarget(self, action: "sendButtonClick:", forControlEvents: .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的顯示文本。
倒計時的功效我們用NSTimer完成,先聲明一個NSTimer實例:
var countdownTimer: NSTimer?
然後我們聲明一個變量來開啟和封閉倒計時:
var isCounting = false {
willSet {
if newValue {
countdownTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTime", userInfo: nil, repeats: true)
remainingSeconds = 10
sendButton.backgroundColor = UIColor.grayColor()
} else {
countdownTimer?.invalidate()
countdownTimer = nil
sendButton.backgroundColor = UIColor.redColor()
}
sendButton.enabled = !newValue
}
}
異樣,我們給isCounting添加一個willSet辦法,當isCounting的newValue為true時,我們經由過程挪用NSTimer的類辦法
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:創立並啟動適才聲明的countdownTimer實例,這個實例每秒鐘挪用一次updateTime:辦法:
func updateTime(timer: NSTimer) {
// 計時開端時,逐秒削減remainingSeconds的值
remainingSeconds -= 1
}
當isCounting的newValue為false時,我們停滯countdownTimer並將countdownTimer設置為nil。
另外我們還設置了倒計時的時光(這裡為了演示時光設置為5秒)和發送按鈕在分歧isCounting狀況下的款式(這裡調劑了配景色)和能否可點擊。
最初完成sendButtonClick:辦法,這個辦法在點擊sendButton時挪用:
func sendButtonClick(sender: UIButton) {
// 啟動倒計時
isCounting = true
}
完成!
【Swift完成iOS運用中短信驗證碼倒計時功效的實例分享】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!