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曾经可以做到这一点,但苹果公司反对它,并在发布说明中表示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)
}
}
}

最新更新