SwiftUI - 创建多平台应用程序时,如何更改场景中的视图?
SwiftUI - When I create multiplatform app, how to change view in scene?
我正在尝试从 SwiftUI 创建一个多平台应用程序。
这是我在
中的代码
@main
struct MyApp: App
@State var sceneManager = SceneManager.shared
var body: some Scene {
WindowGroup {
if sceneManager.state == .landing {
LandingPageView()
} else if sceneManager.state == .historyRecord {
HistoryRecordView()
}
}
}
当我登录成功后,我会将SceneManager.shared属性,从.landing
更改为.historyRecord
但是视图没有改变,我应该如何改变场景的根视图?
谢谢
将 SceneManager
设为 ObservableObject
并将 @State
包装器更改为 @ObservedObject
。
确保 state
是一个 @Published
变量。
https://developer.apple.com/documentation/combine/observableobject
或者您可以将 @State
更改为 @State var sceneManagerState = SceneManager.shared.state
SwiftUI 2.0 为此引入了 StateObject
,所以请使用以下模式
@StateObject var sceneManager = SceneManager.shared
并制作
class SceneManager: ObservableObject {
@Published var state: StateTypeHere
}
我正在尝试从 SwiftUI 创建一个多平台应用程序。
这是我在
中的代码@main
struct MyApp: App
@State var sceneManager = SceneManager.shared
var body: some Scene {
WindowGroup {
if sceneManager.state == .landing {
LandingPageView()
} else if sceneManager.state == .historyRecord {
HistoryRecordView()
}
}
}
当我登录成功后,我会将SceneManager.shared属性,从.landing
更改为.historyRecord
但是视图没有改变,我应该如何改变场景的根视图? 谢谢
将 SceneManager
设为 ObservableObject
并将 @State
包装器更改为 @ObservedObject
。
确保 state
是一个 @Published
变量。
https://developer.apple.com/documentation/combine/observableobject
或者您可以将 @State
更改为 @State var sceneManagerState = SceneManager.shared.state
SwiftUI 2.0 为此引入了 StateObject
,所以请使用以下模式
@StateObject var sceneManager = SceneManager.shared
并制作
class SceneManager: ObservableObject {
@Published var state: StateTypeHere
}