【发布时间】:2022-01-22 15:41:59
【问题描述】:
我做了一个例子来演示我是如何尝试从视图中排除导航状态的。问题在于以某种方式将导航状态存储在 ObservableObject 中会破坏导航。点击“Show SecondDetailView” NavigationLink 后,SecondDetailView 会显示很短的时间,然后视图会弹出。
谁能解释为什么导航到 SecondDetailView 不起作用?
class NavigationCoordinator: ObservableObject {
@Published var showFirstDetailView: Bool = false
@Published var showSecondDetailView: Bool = false
@Published var showThirdDetailView: Bool = false
}
struct MainView: View {
@StateObject
var navigationCoordinator: NavigationCoordinator = NavigationCoordinator()
var body: some View {
NavigationView {
VStack {
Text("MainView").font(.headline)
Text("showFirstDetailView: \(navigationCoordinator.showFirstDetailView.description)")
NavigationLink(isActive: $navigationCoordinator.showFirstDetailView, destination: {FirstDetailView()}, label: {Text("Show FirstDetailView")})
}
}
.environmentObject(navigationCoordinator)
}
}
struct FirstDetailView: View {
@EnvironmentObject
var navigationCoordinator: NavigationCoordinator
var body: some View {
VStack {
Text("FirstDetailView").font(.headline)
Text("showSecondDetailView: \(navigationCoordinator.showSecondDetailView.description)")
NavigationLink(isActive: $navigationCoordinator.showSecondDetailView, destination: {SecondDetailView()}, label: {Text("Show SecondDetailView")})
}
}
}
struct SecondDetailView: View {
@EnvironmentObject
var navigationCoordinator: NavigationCoordinator
var body: some View {
VStack {
Text("SecondDetailView").font(.headline)
Text("showThirdDetailView: \(navigationCoordinator.showThirdDetailView.description)")
NavigationLink(isActive: $navigationCoordinator.showThirdDetailView, destination: {ThirdDetailView()}, label: {Text("Show ThirdDetailView")})
}
}
}
struct ThirdDetailView: View {
@EnvironmentObject
var navigationCoordinator: NavigationCoordinator
var body: some View {
Text("ThirdDetailView").font(.headline)
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView()
}
}
【问题讨论】:
标签: swiftui swiftui-navigationlink swiftui-navigationview