Formation PUB900 : Développer une application pour iPhone avec SwiftUI, H-2024 Quelques vues SwiftUI

65.6 Demander une confirmation avec .confirmationDialog()


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.

SwiftUI

// 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
  }
}

confirmationDialog()

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 ».

SwiftUI

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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre