我正在创建一个注册视图(表单),其中包含全名,电子邮件,密码和验证密码作为文本字段。我想使用验证作为"强制字段"用户输入数据时出现错误。我已经为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
// }
}
答案 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中的文本字段。