SwiftUI 工具栏在混合 Appkit/SwiftUI 应用程序中使用

问题描述 投票:0回答:1

我有一个具有 Appkit 生命周期的 Mac 应用程序。我想创建一个完全由 SwiftUI 定义的窗口,包括工具栏。

我尝试过的:

  1. 以编程方式创建一个

    NSWindow
    并将其视图设置为使用
    NSHostingView
    的 SwiftUI 视图的
    .toolbar(...)
    工具栏不显示。

  2. 以编程方式创建一个

    NSWindow
    和一个
    NSToolbar
    ,使用 Appkit API 设置工具栏并将工具栏分配给窗口。 工具栏按预期显示,但未使用 SwiftUI 配置,并且工具栏引用或与 SwiftUI 视图状态交互很尴尬。

  3. 使用 SwiftUI 生命周期重写整个应用程序。 工作正常。对我来说这不是一个选择。

主要问题:

有没有办法为手动创建的

NSWindow
连接工具栏,以便SwiftUI视图可以使用
.toolbar
属性来放置/管理其中的项目?

如果答案很简单,“不”:

  • 有没有一种方法可以创建完整的 SwiftUI 生命周期窗口,而无需以这种方式构建整个应用程序? (我有很多非 SwiftUI 窗口无法/不会转换)
  • 或者,有没有一种方法可以让 Appkit 工具栏代码不那么笨拙地引用 SwiftUI 视图中的视图状态和/或响应 SwiftUI 状态中已发布的更改?
macos swiftui appkit nstoolbar
1个回答
0
投票

我不确定这是否是您面临的确切问题,但我找到了一种使 SwiftUI 场景工具栏与 AppKit 一起使用的方法

NSHostingViewController
:

实例化托管视图控制器时,设置其桥接选项以允许托管视图使用工具栏:

    let mySwiftUIView = View()
    let hostingView = NSHostingView(rootView: mySwiftUIView)
    hostingView.sceneBridgingOptions = [.toolbars]

一旦呈现托管视图,它将采用 SwiftUI 视图中定义的工具栏。希望这可以帮助! 来源(Apple 文档):

© www.soinside.com 2019 - 2024. All rights reserved.