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!
Vous pouvez ajouter un simple TapGesture
NavigationLink(destination: ContentView() ) {
Text("Row")
.gesture(TapGesture()
.onEnded({ _ in
//your action here
}))
}
Cela peut également être accompli en utilisant un serveur de publication et le crochet OnReceive
dans n'importe quel héritier de View.