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

67.11 Bouton pour traiter le formulaire


Il n'est pas toujours requis d'ajouter un bouton pour traiter les données saisies dans un formulaire SwiftUI.

Les informations pourraient être traitées à différents moments, par exemple :

  • Au fur et à mesure que les informations sont modifiées (ex : .onChange());
  • Lorsque l'usager clique sur le bouton de retour dans une vue affichée via NavigationLink;
  • Sur-le-champ, lorsqu'il s'agit de valeurs tirées de la base de données à l'aide de SwiftData.

Si vous souhaitez tout de même ajouter un bouton à un formulaire, sachez qu'il n'est pas requis que le bouton soit placé à l'intérieur du Form. Il n'est d'ailleurs pas nécessaire d'utiliser un Form.

Voici quelques exemples de boutons situés au bas d'une série de TextField, avec et sans Form.

Dans ce premier exemple, remarquez l'ajout d'un VStack qui entoure le dernier TextField et le bouton. Ce VStack assure qu'il n'y aura pas de ligne grise juste avant le bouton puisqu'il n'y a une ligne grise qu'entre les enfants directs du Form.

SwiftUI

Form {
  HStack {
    Text("Prénom")
      .frame(width: largeurLibelles, alignment: .leading)
    TextField("", text: $prenom)
  }

  // VStack pour éviter une ligne grise entre le dernier TextField et le bouton
  VStack {
    HStack {
      Text("Nom de famille")
        .frame(width: largeurLibelles, alignment: .leading)
      TextField("", text: $nomFamille)
    }

    Button(action: {
      // traitement ici
    }) {
      Text("Enregistrer")
        .frame(maxWidth: .infinity)
    }
    .buttonStyle(.borderedProminent)
  }
}

Bouton

 Ici, on utilise l'approche avec des sections pour les libellés.

SwiftUI

Form {
  Section(header: Text("Prénom")) {
    TextField("", text: $prenom)
  }
  .listSectionSpacing(8)


  Section(header: Text("Nom de famille")) {
    TextField("", text: $nomFamille)
  }

  Button(action: {
    // traitement ici
  }) {
    Text("Enregistrer")
      .frame(maxWidth: .infinity)   // sans ceci, le texte du bouton serait aligné à gauche
  }
}

Bouton

Voici un exemple sans Form.

SwiftUI

VStack(alignment: .leading) {
  Text("Prénom")
  TextField("", text: $prenom)
    .textFieldStyle(.roundedBorder)
    .padding(.bottom, 20)

  Text("Nom de famille")
  TextField("", text: $nomFamille)
    .textFieldStyle(.roundedBorder)
    .padding(.bottom, 20)

  Button(action: {
    // traitement ici
  }) {
    Text("Enregistrer")
      .frame(maxWidth: .infinity)
  }
  .buttonStyle(.bordered)
}
.padding()
Spacer()

Bouton

▼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