我现在有一个问题: 我想要的是:第一次启动应用程序时,应该显示我已经存在的视图。我已经在AppDelegate中实现了一些检查应用程序是否首次启动的功能。如果是这样的话,应该提出另一种观点。有没有一种方法可以像在Storyboard中一样直接在AppDelegate中执行此操作?
谢谢。
答案 0 :(得分:1)
在AppDelegate中,您有一个托管控制器,用于引导主SwiftUI视图。因此,实现此目标的一种方法是有条件地设置rootView
。
UIHostingController(rootView: isFirstTime ? FirstTimeView() : ContentView())
答案 1 :(得分:1)
我将创建一个初始RootView
,仅在内容之间切换并提供传递给它的EnvironmentValues
。
struct RootView: View {
@Environment(\.isInitialLaunch) var isInitialLaunch: Bool
var body: some View {
Group {
if isInitialLaunch {
FirstTimeView()
} else {
ContentView()
}
}
}
然后,在SceneDelegate
中:
self.window?.rootViewController = UIHostingController(rootView: RootView().environment(\.isInitialLaunch, isInitialLaunch))
或者,将isInitialLaunch
设为@State
(或@Binding
,@ObservedObject
等)变量。这样,在完成注册过程后,如果将其更改为false
,SwiftUI实际上将自动为用户设置ContentView
的动画。