如何在基于 SwiftUI ReferenceFileDocument 的应用程序中打开新文档窗口?
背景
此 macOS 应用程序以编程方式WindowGroups
使用.handleEvents(:)
. 不幸的是,这会导致文件/新建菜单将这些窗口组的名称包含在“新建...窗口”中(如图所示)。未能找到覆盖该包装的方法,我试图完全使用CommandGroup(replacing: .newItem) {}
.
然而,我也未能重新制作“创建并打开一个新的文档窗口”命令。我试过搜索一些通知来发布和申请.handleEvents
。这只会使现有的打开文档窗口成为关键窗口。没有打开的文档,它什么也不做。
不需要的包装
@main
struct TheApp: App {
@StateObject var root: RootStore
var body: some Scene {
DocumentGroup { ProjectDocument() } editor: { doc in
DocumentGroupRoot(...)
}.commands { Menus(root: root) }
WindowGroup("Preset Color Maps") {
... .handlesExternalEvents(matching: ...) /// Allows multiple windows
}.handlesExternalEvents(matching: ...)
WindowGroup("Tutorial") {
...
}.handlesExternalEvents(matching: ...)
}
}
卡在接线“新项目”更换
struct NewCommands: Commands {
var body: some Commands {
CommandGroup(replacing: .newItem) {
NewProjectButton()
}
CommandGroup(after: .newItem) {
ImportersButtons()
}
}
private struct NewButton: View {
@Environment(\.openURL) var openURL
var body: some View {
Button("New Project") { openURL(ExternalEvents.new.url) }
.keyboardShortcut("n", modifiers: .command)
}
}
}
@main
struct TheApp: App {
@StateObject var root: RootStore
var body: some Scene {
DocumentGroup { ProjectDocument() } editor: { doc in
DocumentGroupRoot(...)
.handlesExternalEvents(...) /// Doesn't enable new doc windows
}.commands { Menus(root: root) }
.handlesExternalEvents(matching: ...) /// Only makes existing doc key window
...
}
}