2017-07-04 6 views
2

Je voudrais que mon code affiche simplement une étiquette si et seulement s'il y a du texte dans le textfiled s'il n'y a pas de texte que l'étiquette devrait être cachée. C'est tout. Mon code ci-dessous ne fait pas ce que j'ai décrit ci-dessus.Si autre instruction en fonction de textfield (swif3)

import UIKit 
class ViewController: UIViewController { 

    @IBOutlet var label: UILabel! 
    @IBOutlet var txtfield: UITextField! 
override func viewDidLoad() { 
super.viewDidLoad() 
appear() 

    } 
    func appear() { 

if (txtfield.text?.isEmpty)! { 
    label.isHidden = true 

} 
else { 
    label.isHidden = false 
}}} 
+0

Comment le champ de texte est-il rempli? par programme à partir d'un autre contrôleur de vue? Ou l'utilisateur écrit quelque chose dessus? – Pochi

+0

@Pochi l'utilisateur écrit quelque chose dessus. –

+0

donc vous voulez que l'étiquette apparaisse/disparaisse APRÈS que l'utilisateur ait écrit quelque chose sur ce contrôleur de vue. Droite? – Pochi

Répondre

0

Utilisez le code ci-dessous.

override func viewWillAppear(_ animated: Bool) 
    { 
     textChanged(txtField) 
    } 

    func textChanged(_ textField: UITextField) { 

     if textField.text == "" 
     { 
      textField.isHidden = true 
     } 
     else 
     { 
      textField.isHidden = false 
     } 
     print("Hello") 
    } 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     txtField.addTarget(self, action: #selector(textChanged(_:)),for: .allEvents) 
    } 
  • func textChanged se cacheront votre textField si elle est vide.
  • L'ajout à viewWillAppear vérifie textField à l'affichage de l'heure.
  • Dans viewDidLoad la cible (textChanged) est ajoutée à textField pour chaque événement.
2

Votre code ne fonctionnera pas car la vérification est effectuée UNIQUEMENT une fois le View Controller chargé.

Ce que vous avez à faire est d'exécuter la fonction appear() chaque fois que l'utilisateur a fini d'éditer le champ de texte.

Il suffit donc de définir le délégué de votre point de vue de texte à ce contrôleur de vue et mettre en œuvre cette fonction:

optional func textViewDidEndEditing(_ textView: UITextView) 

https://developer.apple.com/documentation/uikit/uitextviewdelegate/1618628-textviewdidendediting

Ensuite, il suffit d'appeler le apparaissent() à l'intérieur.

Edit: Version texte du champ

optional func textFieldDidEndEditing(_ textField: UITextField) 

https://developer.apple.com/documentation/uikit/uitextfielddelegate/1619591-textfielddidendediting

+0

J'utilise un textfield pas textview. –

+0

Ensuite, utilisez la version textfield, c'est pareil. – Pochi

+0

ou bien gardez un bouton et appelez la fonction 'appear()' sur le bouton click –