不调用textFieldDidEndEditing,也不检查验证

时间:2018-01-08 09:48:32

标签: ios uitextfield swift4

我正在创建一个注册视图(表单),其中包含全名,电子邮件,密码和验证密码作为文本字段。我想使用验证作为"强制字段"用户输入数据时出现错误。我已经为UITextField和String创建了扩展。但是我发现没有调用textFieldDidEndEditing,也没有检查验证。有人帮我解决这个问题吗?

//的UITextField

import UIKit

extension UITextField {

func addLeftPadding() {
    let view = UIView(frame:CGRect(x: 0, y: 0, width: 10, height: 40))
    self.leftView = view
    self.leftViewMode = .always
}

func addWarning(warningMessage message:String) {
    self.removeWarning()
    let label = UILabel(frame: CGRect(x:self.frame.minX,y: self.frame.maxY + 2 , width:self.frame.width,height:15))
    label.tag = self.tag
    label.text = message
    self.superview?.addSubview(label)
}

func removeWarning() {
    for subView in (self.superview?.subviews)! {
        if let label = subView as? UILabel , label.tag == self.tag {
            label.removeFromSuperview()
        }
    }
}

}

//字符串

import UIKit
extension String {

var isEmail: Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailTest.evaluate(with: self)
}
}

// SignUpController

import UIKit
import Material

class SignUpController: UIViewController {


@IBOutlet weak var fullName: TextField!

@IBOutlet weak var Email: TextField!


@IBOutlet weak var PasswordField: TextField!

@IBOutlet weak var NewPassword: TextField!

override func viewDidLoad() {
    super.viewDidLoad()

    prepareFullNameField()
    prepareEmailField()
    preparePasswordField()
    prepareNewPasswordField()


    self.fullName.delegate = self
    self.Email.delegate = self
    self.PasswordField.delegate = self
    self.NewPassword.delegate = self


    fullName.leftViewMode = UITextFieldViewMode.always
    fullName.returnKeyType = UIReturnKeyType.next

    Email.leftViewMode = UITextFieldViewMode.always
    Email.returnKeyType = UIReturnKeyType.next

    PasswordField.leftViewMode = UITextFieldViewMode.always
    PasswordField.returnKeyType = UIReturnKeyType.next

    NewPassword.leftViewMode = UITextFieldViewMode.always
    NewPassword.returnKeyType = UIReturnKeyType.done

//prepareResignResponderButton()
    // Do any additional setup after loading the view.
 }

 }
 extension SignUpController {
    fileprivate func prepareFullNameField() {

        fullName.placeholder = "Name"
        fullName.textColor = UIColor.white
    }
    fileprivate func prepareEmailField() {

        Email.placeholder = "Email"
        Email.textColor = UIColor.white
    }



    fileprivate func preparePasswordField() {

        PasswordField.placeholder = "Password"
        PasswordField.textColor = UIColor.white
    }

    fileprivate func prepareNewPasswordField() {



        NewPassword.placeholder = "Verify Password"
         NewPassword.textColor = UIColor.white
    }

 }
 extension SignUpController: UITextFieldDelegate {


func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate method
    self.view.endEditing(true)
    if textField == fullName {
        fullName.resignFirstResponder()
        //Email.becomeFirstResponder()

        Email.becomeFirstResponder()
    }
    else if textField == Email {
        Email.resignFirstResponder()
        PasswordField.becomeFirstResponder()
    }
    else if textField == PasswordField {
        PasswordField.resignFirstResponder()
        NewPassword.becomeFirstResponder()
    }


    else{
        NewPassword.resignFirstResponder()
    }
    return true
}

func dismissKeyboard() {

    fullName.resignFirstResponder()
    Email.resignFirstResponder()
    PasswordField.resignFirstResponder()
    NewPassword.resignFirstResponder()
}
//    public func textFieldDidEndEditing(_ textField: UITextField) {
//        (textField as? ErrorTextField)?.isErrorRevealed = false
//        print("none")
//    }



func textFieldDidEndEditing(_ textField: UITextField) {
    switch textField {
    case fullName:
        if fullName == nil {

            textField.addWarning(warningMessage: "mandatory_field")
            print("hmmmmmmmmm")

        }else{
            textField.removeWarning()
        }

    case Email:
        if Email == nil {
            textField.addWarning(warningMessage:"mandatory_field")
        }else{
            textField.removeWarning()
        }

    case PasswordField:
        if PasswordField == nil  {
            textField.addWarning(warningMessage: "invalid_email")
        }else{
            textField.removeWarning()
        }

    case NewPassword:
        if  NewPassword == nil {
            textField.addWarning(warningMessage: "minimum_password")
        }else{
            textField.removeWarning()
        }


    default:
        print("default")
    }
}


public func textFieldShouldClear(_ textField: UITextField) -> Bool {
    (textField as? ErrorTextField)?.isErrorRevealed = false
    print("good")
    return true
}

 //    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
 //        (textField as? ErrorTextField)?.isErrorRevealed = true
//
 //        print("ok")
//        return true
//    }

 }

1 个答案:

答案 0 :(得分:0)

请尝试使用以下代码验证文本字段。

 if (textField.text.isEmpty) {

            let alert = UIAlertView()

            alert.title = "No Text"

            alert.message = "Please Enter Text In The Box"

            alert.addButtonWithTitle("Ok")

            alert.show()

 }

我还使用相同的代码验证Swift版本3中的文本字段。

相关问题