swift 验证码倒计时代码

2016-06-03  本文已影响780人  JackMayx

直接上代码

import UIKit

///验证码倒计时
class RFCodeCountdownBtn:UIButton{
    ///验证码倒计时的起始秒数
    var maxTimer = 10
    
    var countDown = false{
        didSet{
            
            if oldValue != countDown{
                countDown ? startCountDown() : stopCountDown()
            }
        }
    }
    
    private var second = 0
    private var timer: NSTimer?
    ///倒计时显示
    private var timeLabel: UILabel!
    private var normalText: String!
    private var normalTextColor: UIColor!
    private var disabledText: String!
    private var disabledTextColor: UIColor!
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        setuptimeLabel()
    }
    
    deinit {
        countDown = false
    }
    
    // MARK: Setups
    private func setuptimeLabel() {
        normalText = titleForState(.Normal)!
        disabledText = titleForState(.Disabled)!
        normalTextColor = UIColor .redColor()
        disabledTextColor = UIColor .greenColor()
        setTitle("", forState: .Normal)
        setTitle("", forState: .Disabled)
        timeLabel = UILabel(frame:bounds)
        timeLabel.textAlignment = .Center
        timeLabel.font = titleLabel?.font
        timeLabel.textColor = normalTextColor
        timeLabel.text = normalText
        addSubview(timeLabel)
    }
    
    // MARK: Private
    private func startCountDown() {
        second = maxTimer
        updateDisabled()
        
        if timer != nil {
            timer!.invalidate()
            timer = nil
        }
        
        timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(RFCodeCountdownBtn.updateCountdown), userInfo: nil, repeats: true)
    }
    
    private func stopCountDown() {
        timer?.invalidate()
        timer = nil
        updateNormal()
    }
    
    private func updateNormal() {
        enabled = true
        timeLabel.textColor = normalTextColor
        timeLabel.text = normalText
    }
    
    private func updateDisabled() {
        enabled = false
        timeLabel.textColor = disabledTextColor
        timeLabel.text = "重新发送" + String(second) + "'"
    }
    
    @objc private func updateCountdown() {
        //        print("second == \(second)")
        if second <= 1 {
            countDown = false
        } else {
            second = second - 1
            updateDisabled()
        }
    }
}

用法:

var btn: RFCodeCountdownBtn!

///验证码按钮实现方法
    @IBAction func getCodeMethod(sender: AnyObject) {
        
        btn.countDown = true
        btn.maxTimer = 10
        
        
    }
上一篇下一篇

猜你喜欢

热点阅读