La méthode confirmationDialog() permet d'afficher un popup au bas de l'écran pour permettre à l'usager d'accepter ou de refuser une proposition.
Son fonctionnement ressemble à celui de alert() : une variable d'état contrôle s'il doit être affiché ou non et on peut définir quels boutons seront affichés et quelles actions ils déclencheront.
Si aucun bouton avec le rôle .cancel n'est défini dans le confirmDialog(), un bouton Cancel sera automatiquement ajouté. Si l'appareil est configuré en français, on verra plutôt le libellé Annuler.
L'ajout manuel d'un bouton d'annulation permet d'effectuer des tâches de nettoyage.
Un clic en dehors du popup fera la même chose que si l'usager avait cliquésur le bouton d'annulation.
// role: .destructive pour mettre en rouge
Button(role: .destructive, action: {
afficherPopupConfirmationSuppression = true
}) {
Image(systemName: "trash")
.padding(.trailing)
}
.confirmationDialog("Supprimer l'item \(nomItem)?", isPresented: $afficherPopupConfirmationSuppression, titleVisibility: .visible) {
Button("Supprimer", role: .destructive) {
... // appelle la fonction de suppression
}
}
Lorsqu'on a une vue List, il est parfois préférable d'attacher le .confirmationDialog() au List plutôt qu'au bouton qui est à l'intérieur de la liste.
Ceci est le cas, notamment, si on obtient le message d'erreur « The compiler is unable to type-check this expression in reasonable time ».
List(items) { item in
...
Button(role: .destructive, action: {
afficherPopupConfirmationSuppression = true
itemASupprimer = item // pour que le code sache quel item supprimer
}) {
Image(systemName: "trash")
}
}
.confirmationDialog(itemASupprimer != nil ? "Supprimer l'item \(itemASupprimer!.titre)?" : "Supprimer l'item?", isPresented: $afficherPopupConfirmationSuppression, titleVisibility: .visible) {
Button("Supprimer", role: .destructive) {
if itemASupprimer != nil {
... // appelle la fonction de suppression
itemASupprimer = nil
}
}
Button("Annuler", role: .cancel) {
itemASupprimer = nil
}
}
▼Publicité