Fiche 03.09 — Listes avancées : sections, swipe, suppression, édition
Objectif
Comprendre comment créer des listes SwiftUI plus complètes avec List, Section, ForEach, swipeActions, .onDelete, .onMove et EditButton.
Les listes sont utilisées partout : paramètres, messages, notifications, produits, favoris, historiques, etc.
1. Liste simple avec modèle Identifiable
List fonctionne très bien avec des modèles qui respectent Identifiable.
2. Liste avec Section
Section permet de regrouper visuellement les éléments.
3. Cellule custom
Utilisation :
4. Swipe actions
swipeActions permet d’ajouter des actions quand l’utilisateur glisse une cellule.
Les swipe actions sont utiles pour supprimer, archiver, marquer comme lu, ajouter aux favoris, etc.
5. Suppression avec onDelete
onDelete fonctionne avec ForEach.
offsets correspond aux positions des éléments supprimés dans la liste.
6. Déplacement avec onMove
EditButton active automatiquement le mode édition de la liste.
7. Suppression et édition dans la même liste
8. Navigation liste vers détail
NavigationLink dans une List est très courant pour aller vers un écran détail.
9. Limites de List
List est très pratique, mais son style est parfois difficile à personnaliser complètement.
Pour une interface très custom, tu peux préférer :
List est idéale pour les listes iOS classiques.
ScrollView + LazyVStack est mieux pour les feeds, cards custom, interfaces très visuelles ou designs plus libres.
Points à connaître
onDelete et onMove doivent être attachés à un ForEach, pas directement à List.
Pour modifier un élément, il faut retrouver son index dans le tableau.
EditButton fonctionne très bien avec les listes éditables.
Pour des listes très personnalisées, LazyVStack donne souvent plus de contrôle que List.
Résumé
Listsert aux listes iOS classiques.Sectionpermet de regrouper les contenus.swipeActionsajoute des actions latérales..onDeletepermet la suppression..onMovepermet le réordonnancement.EditButtonactive le mode édition.- Pour un design très custom, préfère parfois
ScrollView + LazyVStack.