我有一个具有 Appkit 生命周期的 Mac 应用程序。我想创建一个完全由 SwiftUI 定义的窗口,包括工具栏。
我尝试过的:
以编程方式创建一个
NSWindow
并将其视图设置为使用 NSHostingView
的 SwiftUI 视图的 .toolbar(...)
。 工具栏不显示。
以编程方式创建一个
NSWindow
和一个 NSToolbar
,使用 Appkit API 设置工具栏并将工具栏分配给窗口。 工具栏按预期显示,但未使用 SwiftUI 配置,并且工具栏引用或与 SwiftUI 视图状态交互很尴尬。
使用 SwiftUI 生命周期重写整个应用程序。 工作正常。对我来说这不是一个选择。
主要问题:
有没有办法为手动创建的
NSWindow
连接工具栏,以便SwiftUI视图可以使用.toolbar
属性来放置/管理其中的项目?
如果答案很简单,“不”:
我不确定这是否是您面临的确切问题,但我找到了一种使 SwiftUI 场景工具栏与 AppKit 一起使用的方法
NSHostingViewController
:
实例化托管视图控制器时,设置其桥接选项以允许托管视图使用工具栏:
let mySwiftUIView = View()
let hostingView = NSHostingView(rootView: mySwiftUIView)
hostingView.sceneBridgingOptions = [.toolbars]
一旦呈现托管视图,它将采用 SwiftUI 视图中定义的工具栏。希望这可以帮助! 来源(Apple 文档):