Fiche 03.03 — Créer un champ de texte réutilisable en SwiftUI
Objectif
Comprendre comment créer un champ de texte réutilisable avec TextField, SecureField, @Binding, validation simple, message d’erreur et état sécurisé/non sécurisé.
1. L’idée à comprendre
Dans une app, tu vas souvent répéter des champs de texte :
- email ;
- mot de passe ;
- nom d’utilisateur ;
- recherche ;
- formulaire de profil ;
- formulaire d’inscription.
Au lieu de recopier le même style partout, tu peux créer un composant réutilisable.
Exemple d’utilisation souhaitée :
2. TextField simple
TextField a besoin d’un Binding vers le texte.
C’est pour ça qu’on passe :
et pas :
3. Champ réutilisable simple
Utilisation :
Ici, AppTextField ne possède pas la valeur.
Il modifie la valeur du parent via @Binding.
4. Champ avec message d’erreur
Utilisation :
5. Champ email
Pour un champ email, tu peux adapter le clavier et désactiver la capitalisation automatique.
Dans un composant :
6. SecureField pour mot de passe
SecureField sert à masquer le texte.
Utilisation :
7. Champ mot de passe avec bouton afficher/masquer
Utilisation :
8. Exemple réaliste : formulaire de connexion
Ce formulaire reste lisible parce que les champs sont découpés en composants.
9. @FocusState
@FocusState permet de gérer le focus du clavier.
Ici :
- le bouton retour du clavier passe de l’email au mot de passe ;
- puis ferme le clavier sur le mot de passe.
10. Points à connaître
Un champ réutilisable doit recevoir un Binding
Sinon il ne pourra pas modifier la valeur du parent.
Ne mets pas toute la validation dans le composant
Le composant peut afficher une erreur.
Mais la logique de validation complète peut rester dans :
- la vue parente ;
- un ViewModel ;
- un service de validation.
Garde les champs spécialisés si nécessaire
Un EmailField, un PasswordInputView ou un SearchField peuvent être plus clairs qu’un seul énorme composant qui fait tout.
Résumé
À retenir :
TextFieldpermet de saisir du texte ;SecureFieldmasque le texte ;- un champ réutilisable reçoit souvent un
@Binding var text; - un message d’erreur peut être affiché sous le champ ;
- un champ email doit souvent désactiver la capitalisation et l’autocorrection ;
- un champ mot de passe peut avoir un bouton afficher/masquer ;
@FocusStatepermet de gérer le focus clavier ;- la validation complète doit souvent rester dans la vue parente ou le ViewModel.