Comment puis-je vérifier si une UITextField changements?
Je suis en train de bien vérifier si un champ de texte des modifications, soit l'équivalent de trop la fonction utilisée pour textView - textViewDidChange
jusqu'à présent, je l'ai fait:
func textFieldDidBeginEditing(textField: UITextField) {
if self.status.text == "" && self.username.text == "" {
self.topRightButton.enabled = false
} else {
self.topRightButton.enabled = true
}
}
Type de travaux, mais les topRightButton
est activé dès que le champ de texte est appuyé sur, je veux qu'il soit activé uniquement lorsque le texte est effectivement tapé dans?
Vous devez vous connecter pour publier un commentaire.
SWIFT
Swift 4.2
et
SWIFT 3 & swift 4.1
et
SWIFT 2.2
et
OBJECTIVE-C
et textFieldDidChange méthode est
viewDidLoad
. L'action est à la lettre la même. L'application se bloque dès qu'une touche du clavier est enfoncée. Edit: Compris! Manquait le point-virgule à l'intérieur de l'action. Je suppose qu'il ne devait être le même que le nom de la fonction.textFieldDidEndEditing
si je change leUITextField
s'du texte à partir d'un autre objet?UITextField
déléguée est lui-même.textField.addTarget(self, action: #selector(MyViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)
pour le faire fonctionner.Vous pouvez faire cette connexion dans interface builder.
Dans votre scénario, cliquez sur le rédacteur en chef adjoint à la partie supérieure de l'écran (deux cercles dans le milieu).
Ctrl + Clic sur la zone de texte dans interface builder.
Faites glisser à partir de EditingChanged à l'intérieur de votre vue-contrôleur de classe dans l'assistant de vue.
Nom de votre fonction ("textDidChange" par exemple) et cliquez sur connecter.
Swift 3.0
et méthode handle:
Swift 4.0
et méthode handle:
Swift 5.0
et méthode handle:
La manière dont j'ai géré jusqu'ici: dans
UITextFieldDelegate
Swift4 version
Swift 3
Swift 3.0.1+ (Certains de l'autre swift 3.0 réponses ne sont pas à jour)
textField(_:shouldChangeCharactersIn:replacementString:) a travaillé pour moi dans Xcode 8, Swift 3 si vous voulez vérifier chaque pression de touche.
Swift 4
Conforme à UITextFieldDelegate.
Vous pouvez utiliser cette méthode du délégué de UITextFieldDelegate. Il se déclenche à chaque modification de caractère.
Toutefois, CELA ne se DÉCLENCHE AVANT une modification est apportée (en effet, une modification n'est effectuée si vous ne retourne true à partir d'ici).
.isEmpty
méthode n'est pas nécessairement vrai qu'APRÈS cette méthode a eu une chance de retourner vrai; pour indiquer à l'application que le textfield devrait changer.Peut-être utiliser RxSwift ?
besoin
ajouter les importations évidemment
Donc u un
textfield : UITextField
U 3 autres méthodes..
Swift 4
Si vous voulez faire un changement une fois que l'utilisateur a tapé dans l'complètement (Il sera appelé lorsque l'utilisateur rejeter clavier ou appuyez sur entrée).
Vous devez suivre ces étapes:
Exemple de code:
C'est comment vous pouvez ajouter un
textField text change listener
à l'aide de Swift 3:Déclarer votre classe comme
UITextFieldDelegate
Puis juste traditionnellement ajouter un textFieldShouldEndEditing fonction:
créer la nouvelle classe personnalisée MaterialTextfield.swift
Swift 4.2
d'écrire viewDidLoad
écrire ceci à l'extérieur viewDidLoad
Vous pouvez modifier l'événement par UIControl.De l'événement.editingDidBegin ou ce que jamais vous voulez détecter.
swift 4
Dans le viewDidLoad():
Ajouter cette fonction: