SwiftUI-创建多平台应用程序时,如何更改场景视图?

问题描述

我正在尝试从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
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...