首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SwiftUI NavigationView协调员问题

SwiftUI NavigationView协调员问题
EN

Stack Overflow用户
提问于 2022-01-20 16:32:18
回答 1查看 226关注 0票数 0

我举了一个例子来演示如何尝试将导航状态排除在视图之外。问题是,以某种方式将导航状态存储在ObservableObject中会破坏导航。点击"Show SecondDetailView“NavigationLink之后,SecondDetailView会显示很短的时间,然后视图就会弹出。

有人能解释为什么导航到SecondDetailView不起作用吗?

代码语言:javascript
运行
复制
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()
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2022-01-22 07:41:59

不知道为什么SecondDetailView不能工作,内部代码对我们是不可用的。但是要“解决”这个问题,只需将.navigationViewStyle(.stack)添加到NavigationView中即可。为我工作。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70789942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档