需求场景

在macos 中常常需要在一个窗口中打开另一窗口,比如设置页面,关于页面。在 appkit 中 可以使用 NSWorkspace.share.open() 方法打开,在 SwiftUI 中 有更简单的方法。

效果

iShot_2024-04-03_15.02.47.gif

实现

在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 中的方法,下次有问题,首先要看文档。


today
890 声望41 粉丝