如何导航回另一个视图?

How to navigate back and to another view?

我有 3 个视图:A(主视图)、B 和 C。从 ViewA 可以导航到 ViewB 或 ViewC,而 B 和 C 只能自行关闭,如下面的“图表”所示:

  A
 / \ 
B   C

根据 ViewB 中发生的情况,我想返回 ViewA 并打开 ViewC。我尝试在 ViewB 中将状态变量作为绑定发送。

NavigationLink(destination: B_View(locations: self.$showC), isActive: $showB) { EmptyView() }

这样,当我需要时,我可以在 ViewB 中切换 showC,结果如下:

我应该怎么做才能让 ViewC 不被自动关闭?

这是一个可能的解决方案演示。使用 Xcode 12.4 / iOS 14.4.

准备和测试

想法是在根视图端控制导航,因为修改时 NavigationView 内部状态的变化似乎很混乱。

class NavRouteModel: ObservableObject {
    @Published var currentTag: Int?
}

struct TestNavigationTriangle: View {
    @StateObject private var vm = NavRouteModel()
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink("ViewB", destination: ViewB {
                    self.vm.currentTag = 0
                    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                        self.vm.currentTag = 2
                    }
                }, tag: 1, selection: $vm.currentTag)
                NavigationLink("ViewC", destination: Text("ViewC"), tag: 2, selection: $vm.currentTag)
            }
        }
    }
}

struct ViewB: View {
    var completed: () -> () = {}
    
    var body: some View {
        Button("Complete & Go to ViewC", action: completed)
    }
}