繁体   English   中英

SwiftUI 中的动态导航链接目标?

[英]Dynamic NavigationLink destination in SwiftUI?

我有一个视图'B',它有一个带有参数的初始化程序。

struct B: View {
    let arg: Int

    init(arg: Int) {
        self.arg = arg
    }

    var body: some View {
        Text("\(arg)")
    }
}

我有一个导航视图'A'。

'A' 有一个按钮,当按下该按钮时,会显示一个弹出窗口,用户可以在其中从 1-5 中选择一个数字。 一个类型为(Int) -> Void的闭包被调用,并带有所选的数字。

struct A: View {
    @State var showPicker = false

    var body: some View {
        NavigationView {
            Button(action: { self.showPicker = true }) {
                Text("Pick Number")
            }
            .sheet(isPresented: self.$showPicker, content: { 
                NumberPicker { number in 
                    *** Possible to navigate to B from here? ***
                } 
            })
        }
    }
}

问题
是否可以使用闭包的结果初始化视图 B,然后导航到它?

这曾经可以通过DynamicNavigationDestinationLink ,但是 Apple 弃用了它,并在发行说明中声明NavigationLink现在包含它的功能。 我已经搜索了文档,但是,我无法弄清楚如何使用 NavigationLink 来产生相同的结果。

您需要添加一个带有另一个导航视图的新视图,您可以在其中选择数字。

这是一个完整的代码示例,我将如何处理:

import SwiftUI

struct viewA: View {

    var body: some View {
        NavigationView {
            NavigationLink(destination: viewC()) {
                Text("Pick Number")
            }
        }
    }
}

struct viewB: View {

    @Binding var showSheet: Bool
    @Binding var arg: Int

    var body: some View {
        NavigationView {
            List {
                ForEach((1...5), id: \.self) {number in
                    Button(action: {
                        self.arg = number
                        self.showSheet.toggle()
                    }) {
                        Text("\(number)")
                    }
                }
            }
        }
    }
}

struct viewC: View {

    @State var showSheet:Bool = true
    @State var arg: Int = 0

    var body: some View {
        NavigationView {
            Text("\(arg)")
        }
        .sheet(isPresented: $showSheet) {
            viewB(showSheet: self.$showSheet, arg: self.$arg)
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM