我有 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 被自动关闭?
答案 0 :(得分:2)
这是可能的解决方案的演示。使用 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)
}
}