有没有一种方法可以使用NavigationView在两个以上的视图中进行程序化导航?
像这样:View 1 -> View 2 -> View 3
这是我要执行的操作的示例代码:
class Coordinator: ObservableObject {
@Published var selectedTag: String?
}
struct ContentView: View {
@EnvironmentObject var coordinator: Coordinator
let things = ["first", "second", "third"]
var body: some View {
NavigationView {
List(things, id: \.self) { thing in
NavigationLink(destination: SecondView(thing: thing),
tag: thing,
selection: self.$coordinator.selectedTag) {
Text(thing)
}
}
}
}
}
struct SecondView: View {
@EnvironmentObject var coordinator: Coordinator
let thing: String
let things = ["fourth", "fifth", "sixth"]
var body: some View {
List(things, id: \.self) { thing2 in
NavigationLink(destination: ThirdView(thing: self.thing, thing2: thing2),
tag: thing2,
selection: self.$coordinator.selectedTag) {
Text(thing2)
}
}
}
}
struct ThirdView: View {
let thing: String
let thing2: String
var body: some View {
Text("\(thing) \(thing2)")
}
}
我希望我可以选择一个特定的标签并深入导航到ThirdView,但即使是简单的导航也无法使用。如果我在SecondView上选择一个链接,它将向前导航,然后向后导航,而不是像预期的那样向前导航。
我还尝试使用2个变量,一个代表每个屏幕的标签,但是它也不起作用。
有没有办法使这项工作有效?我在做错什么吗?
答案 0 :(得分:0)
当前,您的代码的行为就像从SecondView
到ThirdView
的另一种导航流程一样,我认为您不打算这样做。如果这是预期的情况,您还应该将SecondView
的主体也包裹到NavigationView
中。
注意事项:您将有2个导航栏。
没有tag
和selection
(在SecondView
或ContentView
中),您的代码将按预期工作。在这里使用tag
和selection
有特定的原因吗?我找不到同时使用它们并且只有一个NavigationView
的合适解决方案。