尝试创建多屏幕流时,SwiftUI“推送”NavigationView/NavigationLink不工作

尝试创建多屏幕流时,SwiftUI“推送”NavigationView/NavigationLink不工作,swiftui,Swiftui,在SwiftUI中,我设置了一个4屏幕流1>2>3>4,用户可以点击每个屏幕上的next导航到下一个屏幕,就像UIKit中的典型推送流一样。Im使用编程导航链接,例如isActive参数,以实现灵活性。它到达屏幕3,但由于某种原因,在屏幕3上点击next并不能导航到屏幕4。我想不出来 struct FlowView: View { @State var navigateToScreen2 = false @State var navigateToScreen3 = false @State va

在SwiftUI中,我设置了一个4屏幕流1>2>3>4,用户可以点击每个屏幕上的next导航到下一个屏幕,就像UIKit中的典型推送流一样。Im使用编程导航链接,例如isActive参数,以实现灵活性。它到达屏幕3,但由于某种原因,在屏幕3上点击next并不能导航到屏幕4。我想不出来

struct FlowView: View {
@State var navigateToScreen2 = false
@State var navigateToScreen3 = false
@State var navigateToScreen4 = false
var body: some View {
    NavigationView {
        VStack {
            Text("Screen 1")
            Button(action: { self.navigateToScreen2 = true }, label: { Text("Next") })
            NavigationLink(destination:
                VStack {
                    Text("Screen 2")
                    Button(action: { self.navigateToScreen3 = true }, label: { Text("Next") })
                    NavigationLink(destination:
                       VStack {
                            Text("Screen 3")
                            Button(action: { self.navigateToScreen4 = true}, label: { Text("Next") })
                            NavigationLink(destination:
                                Text("Screen 4"),
                                isActive: self.$navigateToScreen4,
                                label: { EmptyView() }
                            )
                        },
                        isActive: self.$navigateToScreen3,
                        label: { EmptyView() }
                    )
                },
                isActive: self.$navigateToScreen2,
                label: { EmptyView() }
            )
        }
    }
}

}我愿意这样做。它很有效,可以更好地阅读:

struct ContentView: View {

    @State private var navigateToScreen2 = false

    var body: some View {
        NavigationView {
            NavigationLink(destination: View2(), isActive: $navigateToScreen2) {
                Text("View1")
            }
        }
    }
}

struct View2: View {
    @State private var navigateToScreen3 = false

    var body: some View {
        NavigationLink(destination: View3(), isActive: $navigateToScreen3) {
            Text("View2")
        }
    }
}

struct View3: View {
    @State private var navigateToScreen4 = false

    var body: some View {
        NavigationLink(destination: View4(), isActive: $navigateToScreen4) {
            Text("View3")
        }
    }
}

struct View4: View {
    var body: some View {
        Text("View4")
    }
}

谢谢是的,它读起来确实更好,但是试图将导航状态保持在单个视图之外。示例代码只是演示问题的一种方式。我的目标是让屏幕视图不知道它们如何适应导航,并有一个控制导航的整体视图。不过我还是会考虑这个想法的,谢谢你。我的问题是为什么代码不起作用?导航链接没有很好地放置在按钮中。使用按钮操作+NavigationLink的双重绑定双重触发状态。当您在视图之间频繁切换时,您还会看到奇怪的行为,例如在视图之间突然来回跳跃。NavigationLink不在按钮内-我不确定是否遵循。当点击按钮时,NavigationLink会被执行。这就是我在按钮内的意思。我认为这一切足以回答一个问题。这不是聊天平台:-