需求场景
在macos 中常常需要在一个窗口中打开另一窗口,比如”设置页面“、”关于页面“。在 AppKit 中 可以使用 NSWorkspace.share.open()
方法打开,在 SwiftUI 中 有更简单的方法。
效果
实现
在app 入口文件中,添加多个窗口视图,除主窗口外,每个窗口要添加一个id 选项用于打开识别。
WindowGroup(id: "MySetting") {
MySetting()
}
WindowGroup(id:"MyAbout") {
AboutView()
}
在调用的页面注入环境 的openWindow 方法,在回调中执行该方法
struct ContentView: View {
@Environment(.openWindow) private var openWindow
var body: some View {
VStack {
Button {
openWindow(id: "MySetting")
openWindow(id: "MyAbout")
} label: {
Text("open two window")
}
}
}
}
后记
在网上搜索SwiftUI 怎么打开另一个窗口,搜到的是使用 NSWorkspace.share.open 方法,使用这个方法,url 一直有问题,再看看 WindowGroup 的文档,文档中有打开多窗口的方法,现在 MacOS App 开发太少了, 网上搜索到的答案都是使用老旧的 Appkit 中的方法,下次有问题,首先要看文档。