NavigationView上的程序化导航比两个视图更深

时间:2020-05-24 20:21:12

标签: swift swiftui ios-navigationview

有没有一种方法可以使用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个变量,一个代表每个屏幕的标签,但是它也不起作用。

有没有办法使这项工作有效?我在做错什么吗?

1 个答案:

答案 0 :(得分:0)

当前,您的代码的行为就像从SecondViewThirdView的另一种导航流程一样,我认为您不打算这样做。如果这是预期的情况,您还应该将SecondView的主体也包裹到NavigationView中。

注意事项:您将有2个导航栏。

没有tagselection(在SecondViewContentView中),您的代码将按预期工作。在这里使用tagselection有特定的原因吗?我找不到同时使用它们并且只有一个NavigationView的合适解决方案。