从 AppKit NSButton 打开新的 SwiftUI 窗口
Posted
技术标签:
【中文标题】从 AppKit NSButton 打开新的 SwiftUI 窗口【英文标题】:Open New SwiftUI Window from AppKit NSButton 【发布时间】:2021-01-29 18:24:29 【问题描述】:我想在 AppKit 应用程序内的新窗口弹出窗口中显示 SwiftUI 视图。我目前正在情节提要中执行此操作,方法是将Show
从NSButton
转为NSViewController
。
我正在尝试在这样的代码中执行此操作:
@IBAction func clickTest(_ sender: NSButton)
let prefsView = NSHostingController(rootView: PreferencesView())
self.presentAsModalWindow(prefsView) //I don't know how to do a regular "Show"
当我点击按钮时,我知道一个模式正在出现,但它是不可见的。我知道它在那里,因为当我尝试点击我的主应用程序窗口时听到NSBeep
的声音。我还可以在窗口菜单中看到Untitled
窗口。
这里是PreferencesView()
:
import SwiftUI
struct PreferencesView: View
var body: some View
Text("Hello, World!")
struct PreferencesView_Previews: PreviewProvider
static var previews: some View
PreferencesView()
我还需要做些什么来让一个带有我的 SwiftUI 视图的窗口出现在其中吗?
【问题讨论】:
【参考方案1】:我想通了。它需要 AppKit 的一点帮助。您必须创建一个新的 NSWindowController
并使用它来容纳您的 SwiftUI 视图 (NSHostingController
):
@IBAction func clickTest(_ sender: NSButton)
//SwiftUI wrapper
let hostingController = NSHostingController(rootView: PreferencesView())
//New window holding our SwiftUI view
let window = NSWindow(contentViewController: hostingController)
window.setContentSize(NSSize(width: 380, height: 400))
//Create a new window controller and show the window
let controller = NSWindowController(window: window)
controller.showWindow(nil)
如果有人知道更好的方法,我会全力以赴。 :)
【讨论】:
以上是关于从 AppKit NSButton 打开新的 SwiftUI 窗口的主要内容,如果未能解决你的问题,请参考以下文章