首页 > 解决方案 > 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 个变量,一个代表每个屏幕的标签,但它也不起作用。

有没有办法使这项工作?难道我做错了什么?

标签: swiftswiftuiios-navigationview

解决方案


目前,您的代码的行为就像从SecondViewto的另一个导航流程ThirdView,我假设您不打算这样做。如果这是预期的情况,您也应该将SecondView's body 包装成 a NavigationView

警告:您将有 2 个导航栏。

如果没有tagand selection(inSecondView或 also in ContentView),您的代码将按预期工作。tag在此处使用和是否有特定原因selection?我找不到既使用它们又只有一个的适当解决方案NavigationView


推荐阅读