密码键盘

水军日常。

//获取对应的label
var keyView : UIView?

1、弹出键盘

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        let textField = UITextField.init()
        textField.delegate = self
        textField.keyboardType = .numberPad
        textField.keyboardAppearance = .dark
        textField.inputAccessoryView = self.creatHeaderViewForKerboard()
        self.view.addSubview(textField)
        
        textField.becomeFirstResponder()
    }

2、UI

/**创建UI界面*/
    func creatHeaderViewForKerboard() -> UIView {
        
        keyView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: SCREENW, height: 150))
        keyView?.backgroundColor = UIColor.darkGray
        
        let labelWidth = (SCREENW - 70) / 6
        
        //创建显示label
        for i in 0..<6 {
            let lable : UILabel = UILabel.init(frame: CGRect.init(x: CGFloat(i) * (labelWidth + 10) + 10, y: 75 - labelWidth / 2, width: labelWidth, height: labelWidth))
            lable.layer.borderWidth = 1
            lable.layer.borderColor = UIColor.darkGray.cgColor
            lable.tag = 100 + i
            lable.backgroundColor = .white
            lable.textAlignment = .center
            lable.font = UIFont.boldSystemFont(ofSize: 25.0)
            keyView?.addSubview(lable)
        }
        
        //切左上  右上圆角
        let path = UIBezierPath.init(roundedRect: keyView!.bounds, byRoundingCorners: [UIRectCorner.topRight, UIRectCorner.topLeft], cornerRadii: CGSize.init(width: 20, height: 20))
        let maskLayer = CAShapeLayer.init()
        maskLayer.frame = keyView!.bounds
        maskLayer.path = path.cgPath
        keyView?.layer.mask = maskLayer
        
        return keyView!
    }

3、UI界面输入删除数据处理

/**
     本方法无论输入还是删除都会走一遍
     */
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if range.location > 5 {
            return false
        }
        else {
            
            let titleStr = NSString.init(string: textField.text!)
            
            //输入
            if titleStr.length == range.location {
                print("add")
            }
                
            //删除
            else if titleStr.length > range.location {
                print("delete")
            }
            
            let label = self.keyView?.viewWithTag(100 + range.location) as! UILabel
            label.text = string
            return true
        }
    }

4、撤销键盘

override func touchesBegan(_ touches: Set, with event: UIEvent?) {
        self.view.endEditing(true)
 }

你可能感兴趣的:(密码键盘)