【问题标题】:SwiftUI - Using @main to set the rootViewControllerSwiftUI - 使用 @main 设置 rootViewController
【发布时间】:2023-03-23 14:07:01
【问题描述】:

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

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

【问题讨论】:

  • 这是否回答了您的问题stackoverflow.com/a/63276688/12299030?
  • 我认为它可能会完成工作,谢谢,但我真的希望我能以类似于示例的方式解决这个问题。

标签: swiftui uiscenedelegate


【解决方案1】:

这是可能的替代方法,实际上与您的旧 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()

【讨论】:

  • 我最终走向了不同的方向,但这看起来与我试图弄清楚的完全一样。我相信它很快就会派上用场。谢谢!
猜你喜欢
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多