macOS显示SwiftUI的桥接控制器NSHostingController
macOS显示SwiftUI的桥接控制器NSHostingController

macOS显示SwiftUI的桥接控制器NSHostingController

NSHostingController 是 macOS(AppKit)中用于承载 SwiftUI 视图的桥接控制器。它的主要作用是:

把 SwiftUI 的 View 嵌入到 AppKit 的 NSViewController 体系中。

类定义

class NSHostingController<Content> : NSViewController where Content : View

它继承自 NSViewController,并且泛型 Content 必须是 SwiftUI 的 View 类型。

构造方法

init(rootView: Content)

Content 是任意 SwiftUI View;

它会自动将 SwiftUI 的视图渲染为一个 NSViewController 可用的界面。

使用场景

例如,需要在 NSPopover 中使用 SwiftUI 视图:

struct PopoverContentView: View {
    var body: some View {
        VStack(spacing: 10) {
            Text("你好,这是浮窗")
        }
    }
}

let popover = NSPopover()
popover.contentViewController = NSHostingController(rootView: MySwiftUIView())

popover.contentViewController 要求是 NSViewController;

MySwiftUIView() 是 SwiftUI 的 View;

所以必须用 NSHostingController 包装它;

这样就能在 Popover、窗口、Sidebar 等 AppKit 组件中显示 SwiftUI 内容。

关于NSViewController在NSPopover用法,具体请见《macOS浮动窗口NSPopover》的“使用示例”部分。

常见用途

1、弹出框中的内容:popover.contentViewController = NSHostingController(…)。

2、创建窗口的根视图控制器:window.contentViewController = NSHostingController(…)。

3、自定义 NSView 容器内部使用 SwiftUI:将 SwiftUI 嵌入任意 NSView 子视图中。

4、SwiftUI <-> AppKit 混合开发:作为桥梁连接 SwiftUI 和 NSViewController。

UIHostingController 的关系?

1、UIHostingController:用于在iOS / iPadOS / tvOS,使用SwiftUI 嵌入 UIKit。

2、NSHostingController:用于在macOS,使用SwiftUI 嵌入 AppKit。

它们原理相同,只是平台不同。

总结

NSHostingController 是 SwiftUI 视图与 AppKit 系统桥接的关键类。凡是 AppKit 需要 NSViewController 的地方,想用 SwiftUI,就必须使用它。

相关文章

macOS浮动窗口NSPopover:https://fangjunyu.com/2025/06/29/macos%e6%b5%ae%e5%8a%a8%e7%aa%97%e5%8f%a3nspopover/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注