我的应用有 4 个视图(我们称它们为 View_A[root] -> View_B -> View_C -> View_D)。它们之间的导航是使用 NavigationView/NavigationLink 进行的。
当我从最后一个视图(View_D)调用self.presentationMode.wrappedValue.dismiss()时,我希望它只关闭当前视图(D),但由于某种原因,它关闭了所有视图并停在视图 A(根视图) .
这很奇怪。我花了几个小时试图弄清楚那里发生了什么,我发现 - 如果我从“View_A”中删除“ForEach”,它会正常工作,只有最后一个视图被忽略。即使 ForEach 在此示例中仅获得 1 个静态对象。
第二个奇怪的地方是
- 如果我不将“self.thisSession.stats”更改为 false,它也可以正常工作,只关闭最后一个视图。
这非常奇怪,因为 View_A (据我所知)不依赖于 thisSession 环境变量。
关于如何防止 View_C 和 View_B 在这种情况下被解雇的任何想法?单击链接后,我想最终到达View_C ,而不是View_A。
感谢您提供任何帮助,我花了一段时间才找到它的来源,但我不够聪明,无法继续进行;)
import SwiftUI
struct A_View: View {
@EnvironmentObject var thisSession: CurrentSession
var body: some View {
NavigationView {
VStack {
Text("View A")
ForEach([TestObject()], id: \.id) { _ in
NavigationLink(destination: View_B() ) {
Text("Move to View B")
}
}
}
}
}
}
struct View_B: View {
var body: some View {
NavigationView {
NavigationLink(destination: View_C()
) {
Text("GO TO VIEW C")
}
}
}
}
struct View_C: View {
var body: some View {
ZStack {
NavigationView {
NavigationLink(destination: View_D()) {
Text("GO TO VIEW D")
}
}
}
}
}
struct View_D: View {
@EnvironmentObject var thisSession: CurrentSession
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
ZStack {
VStack {
Button(action: {
self.thisSession.stats = false
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Return!")
}
}
}
}
}
class CurrentSession: ObservableObject {
@Published var stats: Bool = false
@Published var user: String = "user"
}
struct TestObject: Identifiable, Codable {
let id = UUID()
}