web-dev-qa-db-fra.com

Swiftui - Comment faire des lignes d'édition dans une liste?

J'aimerais utiliser le mode Editbutton () pour basculer le mode d'édition et faire passer mes lignes de liste en mode édition. Je veux inclure un nouveau bouton en mode édition pour ouvrir un modal. Je ne peux même pas obtenir la valeur EdiDmode pour commuter le contenu de la ligne du tout.

struct ContentView: View {

    @Environment(\.editMode) var isEditMode

    var sampleData = ["Hello", "This is a row", "So is this"]

    var body: some View {
        NavigationView {

            List(sampleData, id: \.self) { rowValue in
                if (self.isEditMode?.value == .active) {
                    Text("now is edit mode")  // this is never displayed
                } else  {
                    Text(rowValue)
                }
            }
            .navigationBarTitle(Text("Edit A Table?"), displayMode: .inline)
            .navigationBarItems(trailing:
                EditButton()
            )
        }
    }
}
10
radicalappdev

Ajout à @kontiki Réponse, si vous préférez utiliser une valeur booléenne pour EditMode, il est donc plus facile de modifier, utilisez ceci @State variable:

@State var editMode: Bool = false

Et modifier le .environment modificateur à ceci:

.environment(\.editMode, .constant(self.editMode ? EditMode.active : EditMode.inactive))

Maintenant, la commutation/à partir du mode édition avec votre propre bouton est aussi simple que:

Button(action: {
    self.editMode = !self.editMode
}, label: {
    Text(!self.editMode ? "Edit" : "Done")
})
1
kdion4891