La détection d'un changement de texte dans UITextfield
Je voudrais être en mesure de détecter si un texte est changé en un UITextField
afin que je puisse ensuite activer un UIButton
pour enregistrer les modifications.
Vous devez vous connecter pour publier un commentaire.
Profiter de la
UITextFieldTextDidChange
de la notification ou de la définition d'un délégué sur le champ de texte et de regarder pourtextField:shouldChangeCharactersInRange:replacementString
.Si vous voulez regarder pour les changements avec une notification, vous aurez besoin de quelque chose comme cela dans votre code pour vous inscrire à la
notification
:Ici theTextField est l'instance de
UITextField
que vous souhaitez regarder. La classe dont l'autonomie est une instance dans le code ci-dessus doit alors mettre en œuvretextFieldDidChange
, comme suit:Si le champ de texte va survivre à la
observer
, alors vous devez désinscrire pour les notifications de l'observateurdealloc
méthode. En fait, c'est une bonne idée de faire cela, même si le champ de texte à ne pas survivre à l'observateur.Au lieu d'observer les notifications ou la mise en œuvre de
textField:shouldChangeCharacterInRange:replacementString:
, il est plus facile de simplement ajouter une cible de l'événement:Notez que l'événement est
UIControlEventEditingChanged
et pasUIControlEventValueChanged
!Les avantages, sur les deux autres propositions de solutions:
NSNotificationCenter
.textField.text
contient le texte de l'utilisateur inscrit. LetextField:shouldChangeCharacterInRange:replacementString:
délégué méthode est appelée avant les changements ont été appliqués, de sortetextField.text
ne pas encore vous donner le texte que l'utilisateur a juste saisies – vous devez appliquer la modification à vous en premier.UITextFieldDelegate
méthode (vous devez appelerstringByReplacingCharactersInRange:withString:
pour obtenir la chaîne de résultat de la variation).Pour cela, vous devez d'abord avoir votre textfield avoir délégué de référence attribué. Et le delgate, doit être, de préférence, la vew contrôleur de fichiers propriétaire de la vue.
Qui va comme
Et dans votre viewController interface, dites-vous, sera la mise en œuvre de UITextFieldDelegate par
Et de votre point de vue contrôleur de mise en œuvre de remplacer
Ainsi, le code ressemblera à
Vous pouvez également vous abonner à la notification qui est un peu bordélique à mon humble avis
Vous pouvez trouver comment le faire ici.
fo
puis tapez un autreo
, letextField.text
est encorefo
et pas encorefoo
! Vous devez appliquer les modifications vous-même.stringByReplacingCharactersInRange
. De vérifier la modification de code.Swift 3.0
Processus 1
Créer IBOutlet de UITextfiled et Ajouter une Cible à champ de texte.
Processus 2
Vous pouvez créer une variable pour stocker la chaîne d'origine, puis de l'enregistrer avec le centre de notification pour recevoir
UITextFieldTextDidChangeNotification
événement:Ensuite, créez une méthode de réception de la notification, et de comparer la valeur actuelle du champ de texte avec la valeur d'origine
N'oubliez pas de vous inscrire à la notification lorsque le contrôleur est libéré.
Ce qui peut être accompli dans Interface Builder sur le
Editing Changed
cas deUITextField
. Faites glisser à partir de votre code et de créer unIBAction
.Par exemple:
Cet événement est la même que celle décrite dans d'autres réponses ici dans le
.text
propriété contient la mise à jour de la saisie de texte quand il est déclenché. Cela peut aider à nettoyer l'encombrement de code en n'ayant pas à ajouter par programmation de l'événement à chaqueUITextField
dans la vue.Vous pouvez ajouter un membre de la classe comme ceci
NSString *changeTemp
,puis