Swiftui 快捷方式导航到列表的通知视图和返回详细视图

Swiftui 快捷方式导航到列表的通知视图和返回详细视图,swiftui,swiftui-list,swiftui-navigationlink,Swiftui,Swiftui List,Swiftui Navigationlink,预期用例 选项卡B->列表视图->详细视图 关于窃听通知 选项卡B->列表视图->详细视图->通知详细视图 返回导航 选项卡B->列表视图->详细视图 但它的工作方式如下 选项卡B->列表视图->详细视图 关于窃听通知 选项卡B->列表视图->详细视图->通知详细视图 返回导航 选项卡B->列表视图 struct ContentView: View { let todoPublisher = NotificationCenter.default.publisher(for: NSNot

预期用例 选项卡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"
        }
    }
}
结构列表视图:视图{ @绑定变量navigationTitle:字符串 var body:一些观点{ 名单{
ForEach(0..A
NavigationLink
始终具有父视图,即包含NavigationLink的视图。当您点击后退箭头时,它将弹出NavigationLink并导航回此父视图

在您的示例中,您正在显示来自
ContentView
的隐藏导航链接。这意味着
ContentView
将成为
NavigationLink
的父级

如果希望导航链接的返回箭头导航到
详细视图
,则需要从
详细视图
启动导航链接

这意味着需要从
详细视图中显示隐藏的NavigationLink

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

请将代码直接粘贴到问题中,不要发布到GitHub的链接。@pawello2222我编辑了我的问题,请检查这一点是否正确,但通知可能会随时出现在任何屏幕上。点击通知时,它必须导航到通知详细信息视图,并向后导航,它必须显示以前导航的视图。@kirang39 t然后,我建议您向ContentView添加一个工作表-这样您就不需要更改通知的处理方式。否则,您可能需要为每个视图添加导航链接和通知处理。