Nous allons maintenant créer une page qui permettra d’ajouter un item à notre liste. Pour cela nous allons créer une nouvelle vue AddItemView qui sera affichée quand l’utilisateur cliquera sur le bouton “Ajouter”.
SwiftUI View, nommez le fichier AddItemView et cliquez sur Create.Dans cette vue nous allons créer un formulaire comme sur la maquette suivante :

Voici la syntaxe pour créer un formulaire :
// AddItemView.swift
var body: some View {
//....
Form { // Wrapper de notre formulaire
Section { // Correspond à une section du formulaire
TextField("Nom de l'objet", text: $name)
Picker("Rarete", selection: $rarity) {
ForEach(Rarity.allCases) { rarity in
Text(String(describing: rarity).capitalized)
}
}
}
/// ...
}
}
Faites en sorte que le formulaire fonctionne dans la preview.
Rarity qui contiendra les valeurs suivantes : common, uncommon, rare, epic, legendary, unique, par défaut dans notre formulaire : common@State : name et rarity. Qui seront bindé aux champs du formulaire.🛟 Reprenez vos exercices Swift sur les enums pour vous aider.
Maintenant que nous avons notre vue, nous allons l’appeler depuis notre vue principale ContentView.

Comme vous le voyez dans la maquette, notre bouton pour ouvrir la page d’ajout est situé dans la barre de navigation. Sauf que nous n’en n’avons pas encore.
Voici comment l’ajouter :
List dans un NavigationStack et ajoutons un bouton dans la barre de navigation// ContentView.swift
NavigationStack {
List {
// ...
}
.navigationBarTitle("Loot") // Notre titre de page, choisissez le titre que vous voulez
.toolbar(content: { // La barre d'outil de notre page
ToolbarItem(placement: ToolbarItemPlacement.automatic) {
Button(action: {
showAddItemView.toggle() // L'action de notre bouton
}, label: {
Image(systemName: "plus.circle.fill")
})
}
})
}
🛟 Décortiquons ce code :
NavigationStackpermet d’ajouter une barre de navigation à notre vue, mais il va aussi gérer la pile de navigation, c’est à dire que si nous ouvrons une nouvelle vue, il va gérer le retour à la vue précédente.- Nous pouvons lui ajouter un
modifier➡️navigationBarTitlequi va ajouter un titre à notre barre de navigation.- Nous pouvons lui ajouter un
modifier➡️toolbarqui va ajouter une barre d’outils à notre barre de navigation.- Dans notre barre d’outils nous allons ajouter un
ToolbarItemqui va contenir unButtonqui va permettre d’ouvrir notre vue d’ajout.- Le
placementpermet de définir où sera placé notre bouton dans la barre de navigation. Ici nous avons choisiautomaticqui va le placer à droite.- Le
labelest le contenu de notre bouton, ici nous avons choisi une image. Nous utiliserons le système d’icône de SF Symbols qui est la bibliothèque d’icone native d’Apple.
ContentView nous allons ajouter une variable @State qui sera un Bool et qui s’appellera showAddItemView et qui sera initialisé à false.Cette variable représentera l’état d’ouverture de notre vue d’ajout. Si elle est à
truealors la vue sera ouverte, sinon elle sera fermée.
modifier ➡️ sheet à notre List qui va permettre d’ouvrir notre vue d’ajout.// ContentView.swift
NavigationStack {
List {
// ...
}.sheet(isPresented: $showAddItemView, content: {
AddItemView()
})
}
🧑🚀 Voilà ! Au clique sur le bouton “Ajouter” notre vue d’ajout devrait s’ouvrir.
C’est probablement contre-intuitif si l’on vient d’un framework impératif : Modifier une variable qui n’a rien à voir avec notre vue d’ajout pour l’ouvrir.
Mais c’est le principe de la programmation déclarative. Nous déclarons l’état cible de notre application et non pas comment elle doit parvenir à cet état.
Data Flow de SwiftUI