[英]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.