【问题标题】:How to navigate back and to another view?如何导航回另一个视图?
【发布时间】:2021-05-17 13:47:35
【问题描述】:

我有 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,结果如下:

  • 视图 B 已关闭
  • 视图C被推送显示
  • 视图 C 也被关闭 :(

我应该怎么做才能防止 ViewC 被自动关闭?

【问题讨论】:

    标签: swiftui swiftui-navigationlink


    【解决方案1】:

    这是一个可能解决方案的演示。使用 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)
        }
    }
    

    【讨论】:

    • 所以根据你的回答,这个question 有同样的问题,我想知道为什么状态会被那个动作混淆,它看起来像一个错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多