Événement de changement de texte UITextField : capturer chaque frappe correctement

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Événement de changement de texte UITextField : chaque caractère compte

\n\n

Imaginez : vous développez une application de notes, de recherche dans un catalogue ou de messagerie. L'utilisateur commence à peine à taper dans UITextField, et vous devez déjà réagir — afficher des suggestions, compter les caractères restants ou envoyer une requête au serveur. Comment capturer ce moment précis où le texte a changé ? Une question qui tourmente les débutants et même les développeurs iOS expérimentés. Sur Stack Overflow, le sujet UITextField text change event a rassemblé des milliers de vues — et ce n'est pas sans raison.

\n\n

Dans le développement iOS, il existe au moins trois approches fonctionnelles. Et un mauvais choix peut vous coûter des bugs, des fuites mémoire ou 100 lignes de code supplémentaires. Aujourd'hui, nous allons détailler toutes les méthodes pour suivre les modifications de texte dans UITextField : du délégué classique au Combine moderne. C'est parti !

\n\n

Pourquoi ne suffit-il pas d'appuyer sur un bouton ?

\n\n

À première vue, quoi de plus simple ? L'utilisateur a saisi du texte — il appuie sur « Terminé » ou sur le bouton « Rechercher ». Mais les interfaces modernes exigent une réaction en temps réel. Voici des scénarios typiques :

\n
    \n
  • Autocomplétion (search as you type) — des suggestions apparaissent à chaque frappe.
  • \n
  • Validation en direct — vérification de l'email ou du numéro de téléphone sans soumettre le formulaire.
  • \n
  • Compteur de caractères — par exemple, dans un client Twitter, il faut afficher le nombre de caractères restants avant la limite.
  • \n
  • Recherche dynamique — filtrage d'une liste de contacts ou de produits.
  • \n
\n

Dans tous ces cas, nous avons besoin de l'événement UITextField text change event. Et maintenant la question : comment l'implémenter correctement en Swift ?

\n\n

Méthode 1 : Délégué UITextFieldDelegate — le classique

\n\n

La méthode la plus évidente et sans doute la plus populaire. Vous assignez un délégué à votre champ de texte et implémentez la méthode textField(_:shouldChangeCharactersIn:replacementString:). Mais il y a un détail : cette méthode est appelée avant que le texte ne soit réellement modifié. Elle demande : « Puis-je insérer ce caractère ? »

\n\n

Pour obtenir le texte actuel, vous devez le construire manuellement :

\n\n
class ViewController: UIViewController, UITextFieldDelegate {\n    \n    @IBOutlet weak var textField: UITextField!\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        textField.delegate = self\n    }\n    \n    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {\n        let currentText = textField.text ?? ""\n        guard let stringRange = Range(range, in: currentText) else { return false }\n        let updatedText = currentText.replacingCharacters(in: stringRange, with: string)\n        \n        print("Nouveau texte : \\(updatedText)")\n        // Ici, vous pouvez mettre à jour l'interface ou lancer une recherche\n        return true\n    }\n}\n
\n\n

Avantages :

\n
    \n
  • Contrôle total sur la saisie — vous pouvez interdire l'insertion de certains caractères.
  • \n
  • Fonctionne sur toutes les versions d'iOS.
  • \n
\n

Inconvénients :

\n
    \n
  • Code lourd pour une simple « capture de modification ».
  • \n
  • Nécessité de gérer NSRange et la conversion en Range<String.Index>.
  • \n
  • Ne se déclenche pas lors d'une modification programmatique de textField.text = "nouveau texte".
  • \n
\n\n

Cette approche est parfaite si vous devez valider la saisie (par exemple, interdire les lettres dans un champ de numéro de téléphone). Mais pour un simple suivi des modifications, il existe des options plus élégantes.

\n\n

Méthode 2 : Target-Action (UIControl.Event.editingChanged) — simplicité et fiabilité

\n\n

La deuxième méthode consiste à ajouter une cible et une action pour l'événement .editingChanged. Il se déclenche après chaque modification du texte, et le code est concis :

\n

Blogs

Book Recommendations