我有一个视图'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,然后导航到视图B?
过去DynamicNavigationDestinationLink
可以做到这一点,但是Apple不推荐使用它,并在发行说明中指出NavigationLink
现在包含其功能。我搜索了所有文档,但是,我仍然无法弄清楚如何使用NavigationLink产生相同的结果。
答案 0 :(得分:0)
您需要添加一个新的视图以及另一个导航视图,您可以在其中选择号码。
这是我将如何处理的完整代码示例:
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)
}
}
}