Fiche 03.08 — Gestion du clavier avec @FocusState
Objectif
Comprendre comment gérer le focus des champs texte et le clavier avec @FocusState.
@FocusState permet de savoir quel champ est actif, de passer automatiquement au champ suivant, ou de fermer le clavier.
1. L’idée à comprendre
Quand un utilisateur remplit un formulaire, tu veux souvent :
- ouvrir le clavier sur un champ précis ;
- passer de l’email au mot de passe avec le bouton “Suivant” ;
- fermer le clavier après le dernier champ ;
- déclencher une validation quand l’utilisateur appuie sur “OK”.
SwiftUI permet ça avec @FocusState.
2. Focus simple sur un champ
Quand isEmailFocused passe à true, le champ devient actif.
Quand il passe à false, le clavier se ferme.
3. Gérer plusieurs champs avec enum Field
Pour plusieurs champs, on utilise souvent une enum.
4. submitLabel
submitLabel permet de changer le bouton du clavier.
Exemples :
Sur le clavier, l’utilisateur verra un bouton plus adapté au contexte.
5. Exemple formulaire d’inscription
Ici, si le formulaire est invalide, on peut remettre automatiquement le focus sur le premier champ à corriger.
6. Fermer le clavier en touchant un bouton
La manière simple est de mettre le focus à nil.
Exemple :
7. Interaction avec un ViewModel
Le ViewModel peut gérer la validation, mais la vue doit généralement garder le focus.
Vue :
Points à connaître
@FocusState appartient plutôt à la vue, car il concerne l’interface et le clavier.
Le ViewModel peut décider si le formulaire est valide, mais il n’a pas forcément besoin de connaître le champ actuellement focus.
Pour plusieurs champs, préfère une enum Field plutôt que plusieurs booléens.
Résumé
@FocusStatepermet de contrôler le clavier.- Avec une enum
Field, tu peux gérer plusieurs champs proprement. .submitLabel(.next)adapte le bouton du clavier..onSubmitpermet de passer au champ suivant ou de valider.- Pour fermer le clavier, mets le focus à
nil.