0

我的应用有 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()
}
4

1 回答 1

1

你的问题是:

NavigationView

整个视图堆栈中应该只有一个NavigationView。尝试从视图 B 和 C中删除NavigationView

于 2020-07-23T12:11:52.423 回答