Swiftui导航到通知视图并返回列表的详细信息视图

时间:2020-09-16 08:39:32

标签: swiftui swiftui-list swiftui-navigationlink

预期用例 标签B->列表视图->详细信息视图

在点击通知时 标签B->列表视图->详细信息视图->通知详细信息视图

返回

选项卡B->列表视图->详细信息视图

但它的工作原理如下

选项卡B->列表视图->详细信息视图

在点击通知时 标签B->列表视图->详细信息视图->通知详细信息视图

返回

选项卡B->列表视图

struct ContentView: View {
     let todoPublisher = NotificationCenter.default.publisher(for: NSNotification.Name("Detail"))

       @State var show: Bool = false
       @State var navigationTitle: String = "First"

       var body: some View {
           NavigationView {
               VStack {
                      NavigationLink(destination: Detail(), isActive: self.$show) { Text("")}.hidden()
                      // HiddenNavigationLink(destination: Detail(), isActive: self.$show)

                       TabView() {
                           FirtstView(navigationTitle: self.$navigationTitle)
                           .tabItem {
                               Image(systemName: "1.circle")
                               Text("First")
                           }.tag(0)
                               
                           ListView(navigationTitle: self.$navigationTitle)
                          // ListView()
                           .tabItem {
                               Image(systemName: "2.circle")
                               Text("Second")
                           }.tag(1)
                               
                   }

               }
           .navigationBarTitle(navigationTitle)
           }
           .onReceive(todoPublisher) {notification in
               self.show = true
           }
         
       }
}

这是列表视图代码

struct ListView: View {
    @Binding var navigationTitle: String
    var body: some View {
                List {
                    ForEach(0..<5) {data in
                        NavigationLink(destination: DetailView()) {
                                    Text("Text for row \(data)")
                            }
                        }
                }
        .onAppear() {
        self.navigationTitle = "Second"
        }
    }
}

1 个答案:

答案 0 :(得分:0)

NavigationLink始终具有 parent ,即。 包含 NavigationLink的视图。点击后退箭头时,它将弹出NavigationLink并导航回到该父视图。

在您的情况下,您将显示来自ContentView的隐藏的NavigationLink。这意味着ContentView成为NavigationLink parent

如果您想让NavigationLink的后退箭头导航到DetailView,则需要从DetailView启动NavigationLink。

这意味着您需要通过DetailView来显示隐藏的NavigationLink:

struct DetailView: View {
    ...
    var body: some View {
        ...
        NavigationLink(destination: Detail(), isActive: self.$show) { 
            EmptyView() 
        }.hidden()
    }
}