使用NavigationStack在SwiftUI中导航

3

我是SwiftUI框架的新手,我正在尝试实现NavigationStack。我想在按钮动作上导航,而不是使用NavigationLink。这背后的原因是,我需要在按钮动作上执行特定函数后才能导航。

结构体AView:View {

@State private var actionss  = [Int]()

var body: some View {

    NavigationStack(path:$actionss) {
        VStack{
            Button("test") {
                actionss.append(0)
            }
        }
        .navigationDestination(for: Int.self) { data in
            BView()
        }
        
    }
    

}

}

以上关于“AView”的代码可以很好地导航到“BView”。唯一的问题是我无法在不使用NavigationLink的情况下从“BView”导航到“CView”。 在从“BView”到“CView”导航之前,我需要执行特定的功能。 请帮助我。

提前感谢您。


这可能会有所帮助 https://dev59.com/q8Xsa4cB1Zd3GeqPUy-K - Nirav D
1个回答

3
假设工作是在 BView 上完成的,您也可以使用 .navigationDestination
struct AView: View {
    @State private var actionss  = [Int]()

    var body: some View {

        NavigationStack(path:$actionss) {
            VStack{
                Button("show BView") {
                    actionss.append(0)
                }
            }
            .navigationDestination(for: Int.self) { data in
                BView()
            }
            .navigationTitle("AView")
        }
    }
}

struct BView: View {

    @State var show: Bool = false

    var body: some View {

        VStack {
            Button("show CView") {
                show = true
            }
        }
        .navigationDestination(isPresented: $show) {
            CView()
        }
        .navigationTitle("BView")
    }
}

struct CView: View {

    var body: some View {
        Text("Hello")
            .navigationTitle("CView")
    }
}

我正在使用一个按钮和导航目标,但是在导航栏下方的视图中出现了另一个导航栏...在呈现的视图中没有导航堆栈,所以父级导航栏下面不应该有另一个导航栏。有人能告诉我在哪里寻找错误吗? - lorenzo gonzalez
已经找到了我的错误。我在motherView中将路由设置为homeView或Login View,但所有这些都包裹在一个NavigationView中,而在homeView中我使用的是一个NavigationStack...不要混淆它们;在mother view中必须更改为navigationStack并进行修复。 - lorenzo gonzalez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接