J'essaie de faire une navigation dans une liste ou une boucle foreach à Swiftui. Malheureusement, je reçois un comportement vraiment étrange (par exemple, en cliquant sur Leo, il ouvre Karl, ouvrant également des points Max à Karl.
J'ai déjà compris que cela est lié à l'attribut "Isactive" dans la navigationLink. Malheureusement, j'en ai besoin pour atteindre un ce comportement ici: https://i.stack.imgur.com/g0bfz.gif qui est également demandé ici Swiftui - Navigation nichéeView: revenir en arrière Pour racine .
J'ai également essayé de travailler avec la sélection et l'attribut de balises, mais je n'ai pas pu atteindre la mécanique "Retour à la racine".
Voici l'exemple:
import SwiftUI
struct Model: Equatable, Hashable {
var userId: String
var firstName: String
var lastName: String
}
struct ContentView: View {
@State var navigationViewIsActive: Bool = false
var myModelArray: [Model] = [
Model(userId: "27e880a9-54c5-4da1-afff-05b4584b1d2f", firstName: "Leo", lastName: "Test"),
Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Max", lastName: "Test"),
Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Karl", lastName: "Test")]
var body: some View {
NavigationView {
List(myModelArray, id: \.self) { model in
NavigationLink(destination: secondView(firstName: model.firstName), isActive: $navigationViewIsActive){ Text(model.firstName) }
}
.listStyle(PlainListStyle())
}
}
}
struct secondView: View {
@State var firstName: String
var body: some View {
NavigationView {
Text(firstName)
.padding()
}
}
}
Merci!
Vous n'avez pas besoin isactif dans ce cas, il suffit d'utiliser
List(myModelArray, id: \.self) { model in
NavigationLink(destination: secondView(firstName: model.firstName)) {
Text(model.firstName)
}
}
et vous n'avez pas utilisé NavigationView en deuxième vue, c'est-à-dire.
struct secondView: View {
var firstName: String // you don't need state here as well
var body: some View {
Text(firstName)
.padding()
}
}