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

45.1 Menu


Dans cette fiche :

Un menu peut être facilement créé à l'aide de la vue Menu.

Typiquement, le menu affichera une icône qui mène vers les options disponibles.

Différentes icônes peuvent être utilisées selon le contexte et vos préférences, par exemple :

  • text.justify text.justify (menu principal)
  • line.3.horizontal line.3.horizontal (menu principal)
  • ellipsis.circle ellipsis.circle (menu d'action)
  • gearshape gearshape (menu de paramètres ou d'options)
  • slider.horizontal.3 slider.horizontal.3 (menu de paramètres ou d'options)
  • sidebar.left sidebar.left (pour ouvrir un panneau latéral)
SwiftUI

Menu {
    Button(action: {}) {
        Label("Option 1", systemImage: "nom.icone1")
    }
    Button(action: {}) {
        Label("Option 2", systemImage: "nom.icone2")
    }
    Button(action: {}) {
        Label("Option 3", systemImage: "nom.icone3")
    }
} label: {
    Image(systemName: "line.3.horizontal")
        .foregroundColor(.primary)
}

Souvent, le menu sera ajouté dans la barre de navigation.

Swift

struct ContentView: View {
  var body: some View {
    NavigationStack {
      ... // contenu de la vue
      .toolbar(content: {
        ToolbarItem(placement: .principal, content: {
          Text("Le titre")
        })
        ToolbarItem(placement: .topBarLeading, content: {
          Menu...
        })
      })
    }
  }
}

Menu fermé Menu ouvert

Picker

Le menu peut également utiliser un Picker qui a l'avantage d'identifier l'option sélectionnée à l'aide d'un crochet. 

SwiftUI

struct ContentView: View {
  let options: [Option] = [
    Option(id: 1, texte: "Option 1", icone: "1.square.fill"),
    Option(id: 2, texte: "Option 2", icone: "2.square.fill")
  ]

  @State private var optionChoisie: Int = 1

  var body: some View {
    NavigationStack {
      VStack{
        Text("Vous avez choisi :")
        Text(options[optionChoisie-1].texte)
      }

      .navigationBarTitleDisplayMode(.inline)
      .toolbar(content: {
        ToolbarItem(placement: .principal, content: {
          Text("Le titre")
        })
        ToolbarItem(placement: .topBarLeading, content: {
          Menu {
            Picker("Choisissez une option", selection: $optionChoisie) {
              ForEach(options) { option in
                Label(option.texte, systemImage: option.icone)
              }
            }
          } label: {
            Image(systemName: "line.3.horizontal")
              .foregroundColor(.primary)
          }

        })
      })
    }

  }      
}

Picker dans un menu

▼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