所以我一直想这样做一段时间,但我不知道如何处理这一点,所以我伸出手来,看看是否有人可以帮助我。
假设我有以下代码,当应用程序加载时,它会加载“MainView”:
struct MapGlider: App {
@ObservedObject var mainViewModel = MainViewModel()
var body: some Scene {
WindowGroup {
MainView()
.environmentObject(mainViewModel)
}
}
}
这会在应用程序打开时加载Map,这太棒了!在那里一切都很好。
现在,我将在应用程序加载时切换到显示OnboardingView(),例如:
struct MapGlider: App {
@ObservedObject var mainViewModel = MainViewModel()
var body: some Scene {
WindowGroup {
OnboardingView()
}
}
}
现在,我有一个OnboardingView
,它显示了一个带有一些选项的ZStack,如下面的代码所示:
struct OnboardingView: View {
@State private var showGetStartedSheet = false
@ObservedObject var mainViewModel = MainViewModel()
var body: some View {
if #available(iOS 16.0, *) {
NavigationStack {
ZStack(alignment: .top) {
VStack {
LazyVGrid(columns: [GridItem(), GridItem(), GridItem(alignment: .topTrailing)], content: {
Spacer()
Image("onboarding-logo")
.border(.red)
NavigationLink(destination: MainView().environmentObject(mainViewModel), label: {
Text("Skip")
})
})
.border(.red)
}
}
.border(.blue)
}
} else {
// Fallback on earlier versions
}
}
}
它输出以下内容:
我想要达到的目标:
- 当有人点击“Skip”文本时,将删除
OnboardingView
并显示MainView()
。 - 最接近我得到的是设置一个
NavigationLink
,但它有一个后退按钮,并不工作得很好,我希望能够去MainView
,而不能回到OnboardingView
。
我们将非常感谢您的帮助!
1条答案
按热度按时间czfnxgou1#
您可以使用容器视图,根据变量(存储在父级)的状态,有条件地显示Onboarding视图或主视图。
应该可以轻松应用于您的代码的简化示例: