// // SPayPassWordView.swift // SPayPasswordView // // Created by sss on 2017/4/21. // Copyright © 2017年 sss. All rights reserved. // import UIKit protocol SPayPassWordViewDelegate : NSObjectProtocol{ func entryComplete(password:String) } @IBDesignable class SPayPassWordView: UIView { @IBInspectable var lenght:Int = 6 { didSet{ updataUI() } } @IBInspectable var star: String = "●" @IBInspectable var starColor: UIColor = UIColor.cyan { didSet { squareArray.forEach { (label) in label.textColor = starColor } } } @IBInspectable var borderColor: UIColor = UIColor.black { didSet { squareArray.forEach { (label) in label.layer.borderColor = borderColor.cgColor } } } @IBInspectable var borderWidth: CGFloat = 1 { didSet { squareArray.forEach { (label) in label.layer.borderWidth = borderWidth label.layer.masksToBounds = borderWidth > 0 } } } @IBInspectable var borderRadius: CGFloat = 0 { didSet{ squareArray.forEach { (label) in label.layer.cornerRadius = borderRadius } } } var side: CGFloat! var password: String = "" var squareArray = [UILabel]() var space: CGFloat! var textField: UITextField = UITextField() var tempArrat = [String]() override init(frame: CGRect) { super.init(frame: frame) updataUI() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) updataUI() } weak var delegate: SPayPassWordViewDelegate? func updataUI(){ for view in self.subviews{ view.removeFromSuperview() } side = self.frame.height space = (self.frame.width - (CGFloat(lenght) * side)) / CGFloat(lenght - 1) for index in 0.., with event: UIEvent?) { textField.becomeFirstResponder() } deinit { self.delegate = nil } } extension SPayPassWordView:UITextFieldDelegate{ func textFieldDidBeginEditing(_ textField: UITextField) { textField.text = "" password = "" squareArray.forEach { (label) in label.text = "" } } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { /// 处理删除逻辑 if string == "" { if password == ""{/// 密码已经为空 return true }else if password.count == 1{ password = "" }else{ password = String(password[..= lenght { textField.resignFirstResponder() textField.text = password self.delegate?.entryComplete(password: password) self.endEditing(true) return false } return true } }