企業(yè)微信截圖_42448d7d-995d-4252-b25c-17c487e8fb33.png
//
// YeUITextFieldView.swift
// TyeProject
//
// Created by Tye on 20../../..
//
import UIKit
// 自定義 View: 輸入框
class YeUITextFieldView: UIView, UITextFieldDelegate {
var eInputField: UITextField!
var eTypeShow: EnumFieldType = .Tel
var eIntMaxNumToInput: Int = 11
weak var eCtrl: YeLoginRegisterBaseVC!
var eLabelTitle: UILabel!
var labelError : UILabel!
var line : UIView!
var frameError : CGRect!
var correctVerifyCode = ""
var isPass: Bool = false
override init(frame: CGRect) {
super.init(frame: frame)
yeAddUIInputField(frame: frame)
yeAddUIOther(frame: frame);
}
func yeAddUIInputField(frame: CGRect){
eInputField = UITextField(frame: CGRect(x: 20, y: 20, width: frame.size.width-40, height: 40))
eInputField.delegate = self
eInputField.textColor = .white
eInputField.clearButtonMode = .whileEditing
eInputField.font = eFONT_LABEL
self.addSubview(eInputField)
//--- 輸入改變后 檢測 字符串的合法性:
NotificationCenter.default.addObserver(self,
selector: #selector(yeNotificationDidChange(_:)),
name: UITextField.textDidChangeNotification, object: nil)
}
func yeAddUIOther(frame: CGRect){
///
eLabelTitle = UILabel(frame: CGRect(x: 20, y: 0, width: frame.size.width-40, height: 20))
eLabelTitle.textColor = .white
eLabelTitle.font = eFONT_STANDARD
self.addSubview(eLabelTitle)
///
line = UIView(frame: CGRect(x: 20, y: 64, width: frame.size.width-40, height: 1))
line.backgroundColor = UIColor.white
self.addSubview(line)
///
frameError = CGRect(x: 20, y: 69, width: frame.size.width-40, height: 14)
labelError = UILabel(frame: frameError)
labelError.textColor = UIColor(red: 255.0/255, green: 89.0/255, blue: 95.0/255, alpha: 1.0)
labelError.font = UIFont(name: "PingFang SC", size: 10)!
labelError.isHidden = true
self.addSubview(labelError)
}
//---
@objc func yeNotificationDidChange(_ eNotification: Notification?){
//...
}
//---
func yeGetInput() -> String{
return eInputField.text ?? ""
}
func yeInitTypeToShow(eType: EnumFieldType){
self.eTypeShow = eType
switch(eType){
case .Tel:
self.eInputField.keyboardType = UIKeyboardType.phonePad
self.eLabelTitle.text = "Phone number"
self.eIntMaxNumToInput = 11
case .Email:
self.eInputField.keyboardType = UIKeyboardType.emailAddress
self.eLabelTitle.text = "Email"
self.eIntMaxNumToInput = 100
case .Password:
self.eInputField.keyboardType = UIKeyboardType.URL
self.eLabelTitle.text = "Password"
self.eIntMaxNumToInput = 15
self.eInputField.isSecureTextEntry = true //密碼形式;
case .VerifyCode: //手機(jī)驗(yàn)證碼:
self.eInputField.keyboardType = UIKeyboardType.numberPad
self.eLabelTitle.text = "Verification code"
self.eIntMaxNumToInput = 6
case .NickName:
self.eInputField.keyboardType = UIKeyboardType.namePhonePad
self.eLabelTitle.text = "Nickname"
self.eIntMaxNumToInput = 100
//default:
}
}
//
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("---UITextFieldDelegate BeginEditing--")
//self.eCtrl.eType = self.eTypeShow
return true
}
// 限制輸入的字符數(shù): true:接收輸入, false:不接收輸入;
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
print("---UITextFieldDelegate ChangeCharactersIn--")
let eCount = textField.subviews.count
if eCount >= 2
{
let eBtn = textField.subviews[1] as! UIButton
eBtn.imageView?.image = eBtn.imageView?.image?.yeColorBlend(.white, blendMode: .destinationIn)
}
//--- 限制輸入的字符數(shù):
let eTxt = textField.text
let eStr = "\(eTxt!)\(string)"
if eStr.lengthOfBytes(using: .utf8) > self.eIntMaxNumToInput
{
return false //不接收輸入;
}
return true //接收輸入;
}
//---
func yeSuccess()
{
UIView.animate(withDuration: 0.6, delay: 0.0, options: .curveLinear, animations: {
self.isPass = true
let rect = CGRect(x: self.frameError.origin.x, y: self.frameError.origin.y - 20, width: self.frameError.size.width, height: self.frameError.size.height)
self.labelError.frame = rect
self.labelError.layer.opacity = 0.0
self.eLabelTitle.textColor = .white
self.eInputField.textColor = .white
self.line.backgroundColor = .white
//self.controller.checkForm()
}, completion: { finished in
self.labelError.isHidden = true
})
}
func yeError(info : String = "")
{
self.isPass = false
self.labelError.text = info
self.labelError.isHidden = false
let rect = CGRect(x: frameError.origin.x, y: frameError.origin.y - 20, width: frameError.size.width, height: frameError.size.height)
self.labelError.frame = rect
self.labelError.layer.opacity = 0.0
self.eLabelTitle.textColor = .white
self.eInputField.textColor = .white
self.line.backgroundColor = .white
UIView.animate(withDuration: 0.6, animations: {
self.labelError.layer.opacity = 1.0
self.labelError.frame = self.frameError
self.eLabelTitle.textColor = self.labelError.textColor
self.eLabelTitle.textColor = self.labelError.textColor
self.line.backgroundColor = self.labelError.textColor
})
}
//===
required init?(coder: NSCoder) {
fatalError("YeUITextFieldView init(coder:) has not been implemented")
}
deinit {
NotificationCenter.default.removeObserver(self)
}
}
- 使用
var eViewInputTel:YeUITextFieldView!
var eViewInputPwd:YeUITextFieldView!
func yeAddUI(){
eViewInputTel = YeUITextFieldView(frame: CGRect(x: 0, y: 150, width: Int(eScreenH), height: 90))
eViewInputTel.yeInitTypeToShow(eType: .Tel)
eViewInputTel.eCtrl = self
self.view.addSubview(eViewInputTel)
eViewInputPwd = YeUITextFieldView(frame: CGRect(x: 0, y: 250, width: Int(eScreenH), height: 90))
eViewInputPwd.yeInitTypeToShow(eType: .Password)
eViewInputPwd.eCtrl = self
self.view.addSubview(eViewInputPwd)
///
eBtnLogin = UIButton(type: UIButton.ButtonType.custom)
self.view.addSubview(eBtnLogin)
eBtnLogin.frame = CGRect(x: 100, y: 650, width: eScreenW-200, height: 50)
eBtnLogin.setTitle("Login", for: UIControl.State.normal)
eBtnLogin.addTarget(self, action: #selector(yeBtnToLogin(_:)), for: .touchUpInside)
eBtnLogin.backgroundColor = .yellow
eBtnLogin.setTitleColor(.blue, for: .normal)
self.eYToBtn = self.eBtnLogin.frame.origin.y
}
@objc func yeBtnToLogin(_ sender:UIButton){
let eStrName = eViewInputTel.yeGetInput()
var eStrPassword = eViewInputPwd.yeGetInput()
//---校驗(yàn):
let eBl = TyeTool.yeRegexCheck(eStrInput: eStrName , eType: .Tel)
if(!eBl){
eViewInputTel.yeError(info: "請輸入正確的手機(jī)號碼")
print("---Name: 不合法--")
}else{
eViewInputTel.yeSuccess()
}
let eBl2 = TyeTool.yeRegexCheck(eStrInput: eStrPassword, eType: .Password)
if(!eBl2){
eViewInputPwd.yeError(info: "請輸入6位有效數(shù)字")
print("---Password: 不合法--")
}else{
eViewInputPwd.yeSuccess()
}
if !eBl || !eBl2 {
return
}
//
self.yeHideKeyboard()
// 加密傳輸:
eStrPassword = TyeTool.yeEncryptForAES(eStrToEncrypt: eStrPassword)
print("---加密后的密碼:\(eStrPassword)--") //pGZHoS5kPYJd8zVgvV229w==
// Http
//var eDicParameters : Dictionary<String, String>
let eDicParameters = ["phone": eStrName, "password" : eStrPassword]
var eHttp = YeHttpToLoginRegister()
eHttp.eDicParameter = eDicParameters
HUD.show(.progress)
YeHttpRequest().yeSend(eHttp) { eEntity in
HUD.hide(animated: true)
if nil == eEntity{
Toast(text: "網(wǎng)絡(luò)錯誤").show()
}else{
// Save Data
let eBl = TyeTool.yeSaveObjectToUserDefaults(eObject: eEntity!, eStrKey: "TyeLoginEntity")
DispatchQueue.main.async {
let eVC = YeRegisterVC()
self.navigationController?.pushViewController(eVC, animated: true)
}
}
}
}