SwiftUI - 使用@main 设置 rootViewController

标签 swiftui uiscenedelegate

在 SwiftUI 中使用 SceneDelegate 时,可以创建如下所示的函数来设置 View as shown here.但是,在最新版本中,我们现在使用 WindowsGroup。是否可以编写一个函数来更改 WindowsGroup 中的 View ?

func toContentView() {
   let contentView = ContentView()
      window?.rootViewController = UIHostingController(rootView: contentView)
}

最佳答案

这是可能的替代方法,实际上与您的旧 toContentView

相同
  1. 辅助类
class Resetter: ObservableObject {
    static let shared = Resetter()

    @Published private(set) var contentID = UUID()

    func toContentView() {
        contentID = UUID()
    }
}
  1. @main的内容
    @StateObject var resetter = Resetter.shared
    var body: some Scene {
        WindowGroup {
            ContentView()
               .id(resetter.contentID)
        }
    }
  1. 现在可以从代码中的任何位置重置为 ContentView,您只需调用
Resetter.shared.toContentView()

关于SwiftUI - 使用@main 设置 rootViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64122723/

相关文章:

swiftui - SwiftUI 中的 WKWebView 未在 macOS 上加载 HTML 字符串

ios - SwiftUI:如何在没有 AppDelegate 的情况下强制景观

mac-catalyst - 跟踪用户何时返回应用程序或将焦点从 Mac Catalyst 窗口移开

ios - 当主应用程序未打开时,Swift 如何从今天的扩展中打开特定的 View Controller

swiftUI 核心数据 @FetchRequest 单个对象

swift - 如何在 SwiftUI 中让 2x2 的正方形适合屏幕

ios - 用户登录后更新 Root View Controller + iOS 13 及更高版本

ios - 什么时候需要切换 rootViewController

ios - UIScene概念不清楚

ios - 如何检索特定 View 的高度?