如何解决如何在SwiftUI中将导航目标作为参数传递?
我正在使用类似向导的导航创建SwiftUI应用。我已经构建了一个WizardView,然后在其中嵌入了单个页面。 WizardView应该处理常规内容,例如在美观的框架中显示所有内容,显示导航按钮等等。基本上一切看起来都不错,所以我开始研究SwiftUI中导航的工作原理。
这是我最终得到的结果的精简版。问题是,我找不到将nextView
从具体页面传递到WizardView
结构的可能解决方案。
import SwiftUI
struct WizardView<Content: View>: View {
private let content: () -> Content
private var canNavigateBack: Bool
private var canNavigateForth: Bool
// Todo
// How do I pass this as parameter,which has to be optional or some default view,// as the last screen won't have a next one.
private var nextView = EmptyView()
init(canNavigateBack: Bool? = true,canNavigateForth: Bool? = true,@viewbuilder content: @escaping () -> Content) {
self.canNavigateBack = canNavigateBack!;
self.canNavigateForth = canNavigateForth!;
self.content = content
}
var body: some View {
vstack(spacing: 15) {
content()
HStack {
// Todo Implement correct back button
if (canNavigateBack) {
NavigationLink(destination: EmptyView()) {
Text("Back")
}
}
if (canNavigateBack && canNavigateForth) {
Spacer()
}
// Naviate to next screen
if (canNavigateForth) {
NavigationLink(destination: nextView) {
Text("Next")
}
}
}
}
.padding()
}
}
struct DemoView_Previews: PreviewProvider {
static var previews: some View {
vstack {
/**
* The usage within the different screens should be something like this
*/
Divider()
WizardView(canNavigateBack: false) {
Text("This would be the first screen,without back navigation.")
}
Divider()
WizardView() {
Text("This would be another screen.")
}
Divider()
WizardView(canNavigateForth: false) {
Text("This is the last screen,without next button.")
}
Divider()
}
}
}
我对Swift和SwiftUI还是很陌生,所以也许我只是不了解这里的一些基本概念。
更新:
在这里,我发现了至少对我有帮助的东西。 SwiftUI MVVM Coordinator/Router/NavigationLink
我将逐步解决这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。