微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

预期用例 标签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"
        }
    }
}

解决方法

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()
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。