所以我一直想這樣做一段時間,但我不知道如何解決這個問題,所以我伸出手來看看是否有人可以幫助我。
因此,假設我有以下代碼,當應用程式加載時,它會加載“MainView”:
struct MapGlider: App {
@ObservedObject var mainViewModel = MainViewModel()
var body: some Scene {
WindowGroup {
MainView()
.environmentObject(mainViewModel)
}
}
}
這會在應用程式打開后立即加載地圖,這很棒!那里一切都很好。
現在我將切換它以在應用加載時顯示 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
}
}
}
輸出以下內容:

我想要達到的目標:
- 當有人點擊“跳過”文本時,殺死
OnboardingView并顯示MainView(). - 我得到的最接近的是設定 a
NavigationLink,但它有一個后退按鈕并且效果不太好,我希望能夠轉到MainView并且不能回傳到OnboardingView。
所有幫助將不勝感激!
uj5u.com熱心網友回復:
您可以使用有條件地顯示入職或主視圖的容器視圖,具體取決于變數的狀態(存盤在父級)。該變數可以通過 a 傳遞Binding:
應該很容易適用于您的代碼的簡化示例:
class AppState: ObservableObject {
@Published var showOnboarding = true
}
@main
struct CustomCardViewApp: App {
@StateObject var appState = AppState()
var body: some Scene {
WindowGroup {
MainScreenContainer(showOnboarding: $appState.showOnboarding)
}
}
}
struct MainScreenContainer: View {
@Binding var showOnboarding: Bool
var body: some View {
if showOnboarding {
OnboardingView(showOnboarding: $showOnboarding)
} else {
MainView()
}
}
}
struct OnboardingView: View {
@Binding var showOnboarding: Bool
var body: some View {
Text("Onboarding")
Button("Skip") {
showOnboarding = false
}
}
}
struct MainView: View {
var body: some View {
Text("Main")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517738.html
標籤:迅速迅捷
下一篇:如何讓用戶添加到串列
