WallPaperHome722/WallpaperHD_Live/Tool/SPayPassWordView.swift
2024-07-23 11:43:02 +08:00

170 lines
4.2 KiB
Swift

//
// 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..<lenght{
let label = UILabel(frame: CGRect(x: (space + side) * CGFloat(index), y: 0, width: side, height: side))
label.layer.masksToBounds = true
label.textAlignment = .center
label.layer.borderColor = UIColor.gray.cgColor
label.layer.borderWidth = 1
squareArray.append(label)
}
for square in squareArray {
self.addSubview(square)
}
textField.keyboardType = .numberPad
textField.delegate = self
self.addSubview(textField)
}
func input() {
textField.becomeFirstResponder()
}
override func touchesBegan(_ touches: Set<UITouch>, 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[..<password.index(password.endIndex, offsetBy: -1)])
}
}else{
password += string
}
///
for index in 0..<squareArray.count{
if index < password.count {
squareArray[index].text = ""
}else{
squareArray[index].text = ""
}
}
///
if password.count >= lenght {
textField.resignFirstResponder()
textField.text = password
self.delegate?.entryComplete(password: password)
self.endEditing(true)
return false
}
return true
}
}