web-dev-qa-db-fra.com

SwiftUI: Comment puis-je obtenir la ligne sélectionnée dans une liste avant de pousser une autre vue

Une autre lutte SwiftUI!

J'ai une vue qui contient une liste. Lorsque l'utilisateur appuie sur une ligne, je veux d'abord enregistrer l'élément sélectionné dans mon VM puis pousser une autre vue. La seule façon dont je peux penser pour résoudre ce problème est d'enregistrer d'abord la ligne sélectionnée et avoir un autre bouton pour pousser la vue suivante. Il semble impossible de le faire avec un seul robinet.

Quelqu'un a une idée?

Voici le code d'ailleurs:

struct AnotherView : View {
    @State var viewModel = AnotherViewModel()

    var body: some View {
        NavigationView {
            VStack {
                    List(viewModel.items.identified(by: \.id)) { item in
                        NavigationLink(destination: DestinationView()) {
                            Text(item)
                        }
                        // Before the new view is open, I want to save the selected item in my VM, which will write to a global store.
                        self.viewModel.selectedItem = item
                    }
                }
        }
    }
}

Je vous remercie!

6
Benjamin Clanet

Vous pouvez ajouter un simple TapGesture

                NavigationLink(destination: ContentView() ) {
                    Text("Row")
                        .gesture(TapGesture()
                            .onEnded({ _ in
                                //your action here
                    }))
                }
0
Ivan Titkov

Cela peut également être accompli en utilisant un serveur de publication et le crochet OnReceive dans n'importe quel héritier de View.

0
Mike W.