swift - 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 个变量,一个代表每个屏幕的标签,但它也不起作用。
有没有办法使这项工作?难道我做错了什么?
解决方案
目前,您的代码的行为就像从SecondView
to的另一个导航流程ThirdView
,我假设您不打算这样做。如果这是预期的情况,您也应该将SecondView
's body 包装成 a NavigationView
。
警告:您将有 2 个导航栏。
如果没有tag
and selection
(inSecondView
或 also in ContentView
),您的代码将按预期工作。tag
在此处使用和是否有特定原因selection
?我找不到既使用它们又只有一个的适当解决方案NavigationView
。
推荐阅读
- arrays - 在 vue js 视图中显示数组的数据
- java - 在没有 N+1 查询(批处理)的情况下选择 @OneToOne 实体?
- django - 如何在 Django 中检索超级用户的名称?
- java - 是否可以使 Spring Boot JPA Hibernate 应用程序自动创建具有来自 JPA 实体的必要列和关系的表?
- spring-boot - 从多模块项目的父模块运行的 mvn spring boot 仅启动模块中的第一个项目。如何开始两者?
- javascript - 多个对象 Glsl
- c# - EF 核心 Scaffold-DbContext 不起作用:执行超时已过期
- javascript - JavaScript/JQuery/JSON 在属性上附加 for 循环的“i”
- laravel - 在 tinyMCE laravel 7 中找不到图标
- css - PostCSS 的嵌套语法用于 :hover 和 :focus