【问题标题】:Programatical navigation on NavigationView deeper than two views以编程方式在 NavigationView 上导航比两个视图更深
【发布时间】:2020-05-24 20:21:12
【问题描述】:

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

有没有办法让它工作?我做错了吗?

【问题讨论】:

    标签: swift swiftui ios-navigationview


    【解决方案1】:

    目前,您的代码表现得像是从SecondViewThirdView 的另一个导航流程,我假设您不打算这样做。如果这是预期的情况,您也应该将SecondView 的主体包装到NavigationView 中。

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多