2017-04-19 2 views
0

J'ai 4 champs de texte, un bouton et une image, ce que j'essaye de réaliser est que quand le bouton est pressé il devrait avertir l'utilisateur il y a des champs de texte vides et montrer l'image pointant vers le (s) champ (s) vide, mais faire disparaître l'image lorsque l'utilisateur met du texte dans le champ de texte vide. MerciComment afficher l'image lorsque le champ de texte est vide uniquement?

voici mon func

func checkFields(){ 
    let userEmail = user_EmailTxtField.text! 
    let userPassword = user_PassTxtField.text! 
    let passwordConfirm = pass_ConfirmTxtField.text! 
    let userPhone = user_PhoneTxtField.text! 
    //Set backArrow image to show input error to password 
    let imageName = "backArrow.png" 
    let image = UIImage(named: imageName) 
    let passImageView1 = UIImageView(image: image!) 
    passImageView1.frame = CGRect(x: 319, y: 331, width: 49, height: 49) 
    view.addSubview(passImageView1) 
    //Show Arrow image to password confirm error 
    let passConfirmImageView1 = UIImageView(image: image!) 
    passConfirmImageView1.frame = CGRect(x: 319, y: 394, width: 49, height: 49) 
    view.addSubview(passConfirmImageView1) 
    //Show arrow Image to email error 
    let emailImageView1 = UIImageView(image: image!) 
    emailImageView1.frame = CGRect(x: 319, y: 270, width: 49, height: 49) 
    view.addSubview(emailImageView1) 
    //Set image to phonetxt field error 
    let phoneImageView1 = UIImageView(image: image!) 
    phoneImageView1.frame = CGRect(x: 319, y: 209, width: 49, height: 49) 
    view.addSubview(phoneImageView1) 
    if userPhone.isEmpty { 
     phoneImageView1.isHidden = false 
    } else { 
     phoneImageView1.isHidden = true 
    } 
    if userEmail.isEmpty { 
     emailImageView1.isHidden = false 
    } 
    if userPassword.isEmpty { 
     passImageView1.isHidden = false 
    } 
    if passwordConfirm.isEmpty { 
     passConfirmImageView1.isHidden = false 
    } 
} 

Répondre

0

vous pouvez appeler une fonction où vous gérez votre chèque et puis cachez votre image si le texte i sn't vide comme ceci:

Ajouter une cible à vos TextField à l'endroit où vous les créez pour l'événement .editingChanged:

user_EmailTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 
user_PhoneTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 
pass_ConfirmTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 
pass_ConfirmTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged) 

Configuration de la méthode que vous utilisez pour vérifier si les champs de texte se modifier:

func textFieldDidChange() { 
    emailImageView1.isHidden = user_EmailTxtField.hasText 
    phoneImageView1.isHidden = user_PhoneTxtField.hasText 
    passImageView1.isHidden = pass_ConfirmTxtField.hasText 
    passConfirmImageView1.isHidden = pass_ConfirmTxtField.hasText 
} 

donc, si vous appliquez cet exemple à tous vos champs de texte que vous n'avez pas besoin des contrôles dans checkFields() et vous pouvez Renam Exemple: Utilisez votre méthode pour setupTextFields() par exemple pour l'utiliser uniquement comme création des champs de texte

Exemple pour utiliser vos vues d'image dans toutes les méthodes de la classe, mais assurez-vous de les initialiser dans viewDidLoad() par exemple pour éviter de trouver des erreurs nulles pendant que déballant une valeur facultative

class YourClass: UIViewController { 

    // ImageView Reference 
    var emailImageView1: UIImageView! 

    // then your checkFields method 
    func checkFields() { 
    // code before 
    emailImageView1 = UIImageView(image: image!) 
    // code after 
    } 
} 
+0

j'ai essayé cela, mais il me donne une erreur « ne peut pas appeler valeur de type non-fonction « bool » sur la ligne textInput.isempty – SCS

+0

Pouvez-vous vérifier si vous avez utilisé ma dernière mise à jour de la réponse. Mise à jour beaucoup beaucoup – ronatory

+1

@SCS vous pouvez vérifier si votre 'if! User_EmailTxtField.hasText' encore mieux' emailImageView1.isHidden = user_EmailTxtField.hasText' –

0

vous devez séparer la création de l'image (addSubview) et le chèque

mettre la création à viewDidLoad

et vérifier plus tard, les champs et cachez-le ou montrez-le.

tout à l'heure vous créez à chaque fois une nouvelle image qui est placée sur les images créées précédentes (vous pouvez vérifier si vous passez à un wireframe 3D de débogage)

0

Au lieu de vérifier if userPhone.isEmpty, vous devriez essayer:

if user_EmailTxtField.text == nil { 
    phoneImageView1.isHidden = false 
} 

vous pouvez même faire:

if user_EmailTxtField.text == nil || user_EmailTxtField.text == "" { 
     phoneImageView1.isHidden = false 
}