J'essaie de vérifier quand un champ de texte change, équivalent aussi à 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
}
}
Quel type de travaux, mais topRightButton
est activé dès que le champ de texte est activé, je veux qu'il ne soit activé que lorsque le texte est réellement tapé?
ios
swift
uitextfield
boraseoksoon
la source
la source
viewDidLoad
. L'action est la même pour chaque lettre. L'application se bloque dès qu'un bouton du clavier est enfoncé. Edit: Compris! Il manquait le point-virgule à l'intérieur de l'action. J'ai supposé que cela ne devait être que le nom de la fonction.Vous pouvez établir cette connexion dans le générateur d'interface.
Dans votre storyboard, cliquez sur l'éditeur assistant en haut de l'écran (deux cercles au milieu).
Ctrl + clic sur le champ de texte dans le générateur d'interface.
Faites glisser de EditingChanged vers l'intérieur de votre classe de contrôleur de vue dans la vue de l'assistant.
Nommez votre fonction ("textDidChange" par exemple) et cliquez sur se connecter.
la source
Swift 5.0
et gérer la méthode:
Swift 4.0
et gérer la méthode:
Swift 3.0
et gérer la méthode:
la source
La façon dont je l'ai géré jusqu'à présent: dans
UITextFieldDelegate
Version Swift4
la source
Swift 3
la source
Swift 3.0.1+ (certaines des autres réponses de swift 3.0 ne sont pas à jour)
la source
textField (_: shouldChangeCharactersIn: replacementString :) a fonctionné pour moi dans Xcode 8, Swift 3 si vous voulez vérifier chaque pression de touche.
la source
Swift 4
Conforme à UITextFieldDelegate .
la source
Vous pouvez utiliser cette méthode déléguée depuis UITextFieldDelegate. Il se déclenche à chaque changement de personnage.
Cependant, ceci ne se déclenche qu'avant qu'un changement soit effectué (en effet, un changement n'est effectué que si vous revenez vrai d'ici).
la source
.isEmpty
méthode n'est pas équivalente à true tant qu'APRÈS que cette méthode n'a pas eu la chance de retourner true; pour indiquer à l'application que le champ de texte doit changer.Peut-être utiliser RxSwift?
avoir besoin
ajouter des importations évidemment
Alors tu as un
textfield : UITextField
Vous avez 3 autres méthodes ..
la source
Swift 4
Si vous souhaitez effectuer une modification une fois que l'utilisateur a tapé complètement (il sera appelé une fois que l'utilisateur aura fermé le clavier ou appuyé sur Entrée).
la source
la source
Vous devez suivre ces étapes:
Exemple de code:
la source
Voici comment vous pouvez ajouter une
textField text change listener
aide de Swift 3 :Déclarez votre classe comme
UITextFieldDelegate
Ensuite, ajoutez simplement une fonction textFieldShouldEndEditing:
la source
Swift 4.2
écrire ceci dans viewDidLoad
écrire cette vue extérieureDidLoad
Vous pouvez modifier l'événement par UIControl.Event.editingDidBegin ou tout ce que vous souhaitez détecter.
la source
Au cas où vous seriez intéressé par une solution SwiftUI, celle-ci fonctionne pour moi:
Je dois dire que ce n'est pas mon idée, je l'ai lu dans ce blog: Reliure SwiftUI: une astuce très simple
la source
Dans le cas où il n'est pas possible de lier l'addTarget à votre UITextField, je vous conseille de lier l'un d'eux comme suggéré ci-dessus et d'insérer le code pour exécution à la fin de la méthode shouldChangeCharactersIn.
Et en appel dans shouldChangeCharactersIn func.
la source
rapide 4
Dans viewDidLoad ():
Ajoutez cette fonction:
la source
créer une nouvelle classe personnalisée MaterialTextfield.swift
la source
UITextField
a mis à jour sa valeur - pourquoi créer une classe trop complexe pour résoudre ce problème simple?