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