如何解决Swift UI-平面导航或用于设置屏幕的页面无法将自身添加为子视图
我的应用程序需要连接到物理设备,并且需要一些校准过程。
所以我想显示一个欢迎屏幕。欢迎屏幕不应具有导航栏,标题等。但是它应该有两个按钮:“设置新设备”,“使用现有设备”
“设置新设备”将导航到第一个“硬件设置”视图,并在该按钮上导航到第二个“硬件设置”视图,依此类推。
“后退”按钮应始终返回上一页。
我认为它会像这样工作:
StartView (托管所有页面)
struct StartView: View {
@ObservedObject var viewModel = StartViewModel()
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: WelcomeView(viewModel: viewModel),tag: StartViewModel.views.welcome,selection: $viewModel.currentView) {
EmptyView()
}
NavigationLink(destination: HardwareSetupView(),tag: StartViewModel.views.hardwareSetup,selection: $viewModel.currentView) {
EmptyView()
}
}
}
.environmentObject(viewModel)
}
}
视图模型
class StartViewModel: ObservableObject {
enum views {
case welcome
case hardwareSetup
}
@Published var currentView: views? = views.welcome
}
欢迎页面
struct WelcomeView: View {
@ObservedObject var viewModel: StartViewModel
var body: some View {
VStack {
Text("Welcome")
Spacer()
Button(action: {
self.viewModel.currentView = StartViewModel.views.hardwareSetup
}) {
Text("Set up New Device")
}
}
Button(action: {
}) {
Text("Use Existing Device")
.foregroundColor(.secondary)
}
.disabled(true)
}
.navigationBarTitle("Welcome")
}
}
硬件设置页面
struct HardwareSetupView: View {
@EnvironmentObject var viewModel: StartViewModel
var body: some View {
Text("Hardware Setup")
.navigationBarTitle("Hardware Setup")
}
}
我认为当我用枚举更改currentPage时,StartView将更改其内容并显示正确的视图。
但这是一团糟。 当我按“后退”按钮,然后按“致命错误无法将自身添加为子视图”时,按“设置新设备”时,它也会崩溃。
某人知道一个如何实现这种导航的教程吗?我只是找到一些教程,这些教程显示了如何从某种主视图导航到子视图,然后再返回,但没有更深层次的导航。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。