Form dans SwiftUI : qu'est-ce que c'est, création et configuration de formulaires

Auteur : IT Sectr Publié le : 2026-06-25 Temps de lecture : 8 min

Form dans SwiftUI est un composant conteneur pour construire des interfaces structurées de paramètres et de saisie de données, suivant le design des Réglages sur iOS. Le composant regroupe automatiquement les contrôles en sections avec des espacements et des styles système, libérant le développeur du réglage manuel des séparateurs et des couleurs. D'après la Documentation Apple Developer (2025), Form adapte son apparence à chaque plateforme — des tableaux groupés sur iOS aux listes standard sur macOS — tout en conservant une API unifiée.

Points clés

  • Form — un conteneur pour les interfaces de type Settings dans SwiftUI avec regroupement automatique des éléments
  • Section dans Form crée des blocs logiques avec des en-têtes et des pieds de page
  • Picker, Toggle, TextField obtiennent automatiquement un style correspondant à la plateforme
  • L'espacement et les séparateurs sont gérés par le système, sans nécessiter de configuration manuelle
  • NavigationLink permet de créer des formulaires hiérarchiques avec navigation vers des écrans enfants

Qu'est-ce que Form dans SwiftUI ?

Form est un conteneur spécialisé de SwiftUI conçu pour créer des formulaires de saisie et des écrans de paramètres. Il hérite du comportement de List mais ajoute des styles spécifiques à la plateforme : sur iOS, Form s'affiche comme un tableau groupé avec des coins arrondis pour les sections ; sur macOS, il apparaît comme une liste système standard avec des cases à cocher et des contrôles.

Contrairement à la disposition manuelle avec VStack et HStack, Form organise automatiquement l'espacement entre les éléments, ajoute des séparateurs et adapte son apparence au thème du système — clair ou sombre. Le développeur décrit uniquement la structure logique : Section pour le regroupement et les contrôles à l'intérieur. Le formulaire lui-même décide comment disposer visuellement Picker, Toggle ou Stepper sur une plateforme spécifique.

Form prend en charge tous les éléments de saisie standard de SwiftUI : TextField pour le texte, SecureField pour les mots de passe, Picker pour la sélection dans une liste, Toggle pour activer/désactiver, Slider pour les plages, Stepper pour les valeurs incrémentielles et DatePicker pour les dates. Chaque élément obtient automatiquement un style conforme aux HIG (Human Interface Guidelines) d'Apple sur la plateforme cible.

Form vs List : comparaison des conteneurs

Malgré leur similarité visuelle, Form et List résolvent des tâches différentes. List est un conteneur universel pour afficher des listes de données défilables avec des actions de balayage et l'édition de lignes. Form est un conteneur spécialisé pour la saisie de données et les paramètres, optimisé pour les styles de contrôles système.

List est adapté à l'affichage de données dynamiques : fils d'actualités, chats, catalogues de produits. Form est pour les écrans statiques avec un ensemble prévisible de champs : profil utilisateur, paramètres de l'application, formulaire d'inscription. La différence clé : les éléments de Form peuvent être des contrôles interactifs, alors que les lignes de List affichent généralement des données et répondent au toucher par une navigation ou une action.

ParamètreFormList
ObjectifSaisie de données, paramètresAffichage de listes
Style des sectionsGroupé (iOS), système (macOS)Plain ou Groupé
ContrôlesPicker, Toggle, Slider, StepperLimités (bouton)
Données dynamiquesLimité (ForEach dans Section)Prise en charge complète
Actions de balayageOui, swipeActionsOui, swipeActions

Selon les Apple Human Interface Guidelines (2025), Form doit être utilisé pour les écrans de paramètres et de saisie où il y a de 3 à 20 contrôles sur un écran et les diviser en sections améliore l'utilisabilité.

Sections Section dans Form

Section est le bloc de construction principal de Form, permettant de regrouper des éléments logiquement liés. Chaque Section peut avoir un en-tête, un pied de page et un nombre quelconque de contrôles à l'intérieur. Le système ajoute automatiquement de l'espacement entre les sections et enveloppe chacune dans un bloc visuel avec des coins arrondis.

Utiliser Section est crucial pour la lisibilité du formulaire : les éléments groupés par sens sont plus faciles à traiter pour l'utilisateur. Par exemple, sur un écran de paramètres de profil, on peut séparer « Données personnelles », « Notifications » et « Sécurité » dans des sections individuelles. Chaque section peut contenir un pied de page avec un texte explicatif que le système affiche dans une police plus petite en dessous du groupe d'éléments.

swift
Form {
    Section(header: Text("Profil")) {
        TextField("Nom", text: $name)
        TextField("Email", text: $email)
    }

    Section(header: Text("Notifications"),
            footer: Text("Désactiver pendant les réunions")) {
        Toggle("Push notifications", isOn: $pushEnabled)
        Toggle("Email notifications", isOn: $emailEnabled)
    }
}

Dans l'exemple, la première section « Profile » contient deux champs de texte sans pied de page, la deuxième section « Notifications » contient deux interrupteurs avec une explication sous le groupe. Le pied de page ajoute automatiquement un espacement et utilise le style de police caption. Une Section peut avoir un pied de page sans en-tête ou un en-tête sans pied de page.

Contrôles dans Form

Form prend en charge tous les éléments de saisie standard de SwiftUI. Picker dans Form s'affiche automatiquement comme une ligne de navigation avec transition vers un écran de sélection séparé sur iOS. Toggle apparaît comme une ligne avec un interrupteur aligné à droite. TextField obtient le style de saisie système avec un espace réservé.

Pour les valeurs numériques, on utilise Stepper (changement incrémentiel) et Slider (changement progressif dans une plage). DatePicker prend en charge plusieurs modes : date, time, dateAndTime. ColorPicker est disponible pour la sélection de couleurs. Chaque élément s'adapte à la plateforme sans code supplémentaire — sur iOS, les contrôles utilisent les styles natifs UIKit ; sur macOS, AppKit.

ÉlémentObjectifStyle dans Form
TextFieldSaisie de texteLigne avec espace réservé
SecureFieldSaisie de mot de passeLigne avec caractères masqués
PickerSélection dans une listeNavigationLink vers écran de sélection
ToggleActiver/DésactiverLigne avec interrupteur
SliderPlage de valeursCurseur horizontal
DatePickerSélection de date/heureStyle compact ou roue

Pour les contrôles personnalisés dans Form, n'importe quelle SwiftUI View peut être utilisée — elles héritent du comportement standard de la section. Cependant, il est recommandé de s'en tenir aux éléments système, car ils garantissent la conformité aux HIG et prennent en charge l'accessibilité (VoiceOver, Dynamic Type) sans configuration supplémentaire.

Exemples de code Form

Créons un écran d'inscription avec Form. Le formulaire contient quatre sections : données personnelles, sélection du rôle, paramètres d'abonnement et un bouton d'envoi. On utilise Section pour le regroupement et les contrôles standard de SwiftUI.

swift
struct RegistrationForm: View {
    @State private var name = ""
    @State private var email = ""
    @State private var role = "Developer"
    @State private var agreedToTerms = false

    let roles = ["Developer", "Designer", "Manager"]

    var body: some View {
        NavigationStack {
            Form {
                Section(header: Text("Informations personnelles")) {
                    TextField("Name", text: $name)
                    TextField("Email", text: $email)
                        .keyboardType(.emailAddress)
                }

                Section(header: Text("Rôle")) {
                    Picker("Select role", selection: $role) {
                        ForEach(roles, id: \.self) { role in
                            Text(role).tag(role)
                        }
                    }
                }

                Section {
                    Toggle("Agree to terms", isOn: $agreedToTerms)
                }

                Section {
                    Button("S'inscrire") {
                        submitForm()
                    }
                    .disabled(!agreedToTerms)
                }
            }
            .navigationTitle("Registration")
        }
    }

    private func submitForm() { }
}

Le formulaire est divisé en quatre Section : données personnelles avec deux champs de texte, sélection du rôle via Picker, acceptation des conditions via Toggle et un bouton d'inscription. Le bouton est désactivé jusqu'à ce que l'utilisateur accepte les conditions — c'est un exemple de validation dans Form. NavigationStack ajoute un titre et permet à Picker d'ouvrir un écran de sélection séparé sur iOS.

Formulaire de paramètres avec sous-sections

swift
struct SettingsForm: View {
    @State private var volume: Double = 0.5
    @State private var isDarkMode = false
    @State private var reminderDate = Date()

    var body: some View {
        NavigationStack {
            Form {
                Section(header: Text("Apparence")) {
                    Toggle("Dark mode", isOn: $isDarkMode)
                    Slider(value: $volume, in: 0...1) {
                        Text("Volume")
                    }
                }

                Section(header: Text("Rappels"),
                        footer: Text("Vous recevrez une notification à l'heure sélectionnée")) {
                    DatePicker("Remind at",
                        selection: $reminderDate,
                        displayedComponents: .hourAndMinute)
                }

                Section {
                    NavigationLink("Advanced Settings",
                        destination: AdvancedSettingsView())
                }
            }
            .navigationTitle("Settings")
        }
    }
}

Cet exemple démontre une combinaison de Slider, DatePicker et NavigationLink dans Form. DatePicker utilise le mode hourAndMinute pour afficher uniquement l'heure. NavigationLink dans la dernière section crée une transition vers un écran de paramètres avancés — un motif courant pour les interfaces de type Settings. Les en-têtes et pieds de page des sections rendent le formulaire auto-documenté : l'utilisateur comprend immédiatement à quel groupe appartient chaque contrôle.

Questions fréquentes

Quelle est la différence entre Form et List dans SwiftUI ?

Form est optimisé pour la saisie de données et les paramètres : les contrôles obtiennent des styles système, les sections obtiennent des coins arrondis et de l'espacement. List est un conteneur universel pour l'affichage de données. Form est adapté aux écrans de paramètres, List est pour les chats, les fils d'actualités, les catalogues.

Peut-on utiliser Picker dans Form ?

Oui, Picker dans Form s'affiche automatiquement comme une ligne avec la valeur sélectionnée et un NavigationLink pour la sélection dans une liste sur iOS. Sur macOS, Picker apparaît comme une liste déroulante ou un groupe d'options selon le style. L'adaptation se fait sans code supplémentaire.

Comment ajouter une View personnalisée à Form ?

N'importe quelle SwiftUI View peut être placée dans Form ou Section. Pour les contrôles personnalisés, il est recommandé d'hériter de l'espacement standard de la section et de prendre en charge Dynamic Type via les polices système. Évitez les tailles et couleurs fixes pour que le formulaire s'affiche correctement sur tous les appareils.

Est-ce que Form prend en charge le défilement ?

Oui, Form est automatiquement enveloppé dans un ScrollView si le contenu dépasse la hauteur de l'écran. Il n'est pas nécessaire d'ajouter ScrollView manuellement — le système détermine lui-même si le défilement est nécessaire. Pour les formulaires qui ne doivent pas défiler, utilisez VStack avec une hauteur fixe.

Comment changer le style de Form sur iOS ?

Form sur iOS prend en charge deux styles via le modificateur .formStyle(.grouped) — la vue groupée standard avec des sections arrondies. Sur macOS, .formStyle(.columns) est disponible avec une disposition multi-colonnes. Le style s'applique à tout le Form à la fois et modifie la représentation visuelle de tous les éléments internes.

Résumé

  • Form — conteneur SwiftUI pour les interfaces de type Settings avec regroupement automatique via Section
  • Section fournit une séparation logique des éléments avec des en-têtes et des pieds de page
  • Picker, Toggle, TextField s'adaptent automatiquement au style de la plateforme sans configuration manuelle
  • L'espacement et les séparateurs sont gérés par le système, conformément aux HIG d'Apple sur chaque plateforme
  • NavigationLink dans Form crée une navigation hiérarchique — standard pour les écrans de paramètres
  • Form prend en charge tous les éléments de saisie SwiftUI : Slider, Stepper, DatePicker, ColorPicker
  • Utilisez Form pour les écrans de paramètres et de saisie, List pour l'affichage de listes de données dynamiques

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi