需求场景
在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 开发太少了, 网上搜索到的答案都是老旧的 Appkit 中的方法,下次有问题,首先要看文档。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。