美文网首页
验证码输入框

验证码输入框

作者: 子非鱼7868 | 来源:发表于2019-04-28 11:11 被阅读0次

今天写到一个验证码登录框,不是传统的样式,上图,(删除验证码的时候下划线的颜色也会变回去,切图不精)


未命名.gif

代码如下:记录一下

import UIKit

class CodeView: UIView {
    var itemCount :Int?
    var margin:CGFloat?
    var labels : [UILabel] = []
    var lines : [UIView]=[]
    var maView : UIButton = {
        let maView = UIButton()
        maView.contentHorizontalAlignment = .left
        maView.setTitle("输入验证码", for: .normal)
        maView.setTitleColor(UIColor.init(red: 162/255, green: 162/255, blue: 166/255, alpha: 0.6), for: .normal)
        maView.titleLabel?.font = UIFont.systemFont(ofSize: 17)
        maView.backgroundColor = UIColor.init(red: 239/255, green: 239/255, blue: 244/255, alpha: 1)
        return maView;
    }()
    lazy var codeTextField : UITextField = {
        let textField = UITextField()
        textField.autocapitalizationType = .none
        textField.keyboardType = .numberPad
        return textField;
    }()
    var code : String?
    
  func initWithCountAndMargin(count:Int, margin:CGFloat){
        self.itemCount = count
        self.margin = margin
        configTextField()
    }
    func configTextField() {
        self.backgroundColor = UIColor.init(red: 239/255, green: 239/255, blue: 244/255, alpha: 1)
        self.codeTextField.addTarget(self, action: #selector(inputChanged), for: .editingChanged)
      self.addSubview(self.codeTextField)
         self.maView.addTarget(self, action: #selector(clickMaskView), for: .touchUpInside)
        self.addSubview(self.maView)
        for _ in 0..<self.itemCount! {
            let tempLabel = UILabel()
            tempLabel.textAlignment = .center
            tempLabel.font = UIFont.systemFont(ofSize: 20)
            self.addSubview(tempLabel)
            self.labels?.append(tempLabel)
        }
        for _ in 0..<self.itemCount! {
            let tempView = UIView()
            tempView.backgroundColor  = UIColor.init(red: 162/255, green: 162/255, blue: 166/255, alpha: 0.6)
            self.addSubview(tempView)
            self.lines?.append(tempView)
        }
    }
    @objc func inputChanged(tetextField : UITextField)  {
        if (tetextField.text?.count)! == 0{
             maView.setTitle("输入验证码", for: .normal)
        }else{
        self.maView.setTitle("", for: .normal)
        }
        if (tetextField.text?.count)! > self.itemCount! {
            tetextField.text = (tetextField.text! as NSString).substring(with: NSMakeRange(0, self.itemCount!))
    }
       for i in 0..<self.itemCount! {
        let label = self.labels![i]
        let line = self.lines![i]
          if (i < tetextField.text!.count) {
            label.text = (tetextField.text! as NSString).substring(with: NSMakeRange(i, 1))
            line.backgroundColor = UIColor.init(red: 42/255, green: 207/255, blue: 96/255, alpha: 1)
          } else {
            label.text = nil;
          }
      }
    
    
    // 输入完毕后,自动隐藏键盘
    if (tetextField.text!.count >= self.itemCount!) {
        tetextField.resignFirstResponder()
        self.code = tetextField.text!
    }
    }
    @objc func clickMaskView()  {
        self.codeTextField.becomeFirstResponder()
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        if self.labels?.count != self.lines?.count {
            return
        }
        let temp = self.bounds.size.width - (self.margin! * CGFloat.init(self.itemCount! - 1))
        let w = temp / CGFloat.init(self.itemCount!);
        var _ : CGFloat = 0
        
        for i in 0..<self.labels!.count {
            let x = CGFloat.init(i) * (w + self.margin!);
            let label = self.labels![i];
            label.frame = CGRect.init(x: x, y: 0, width: w, height: self.bounds.size.height)

            let line = self.lines![i];
            line.frame = CGRect.init(x: x, y: self.bounds.size.height - 1, width: w, height: 1)
        }
        
        self.codeTextField.frame = self.bounds;
        self.maView.frame = self.bounds;
    }
    override func endEditing(_ force: Bool) -> Bool {
        self.codeTextField.endEditing(force)
        return super.endEditing(force)
    }
}

相关文章

网友评论

      本文标题:验证码输入框

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