gpt4 book ai didi

macos - 在 SwiftUI DocumentGroup macOS 中创建并打开一个新文档

转载 作者:行者123 更新时间:2023-12-04 14:58:23 32 4
gpt4 key购买 nike

如何在基于 SwiftUI ReferenceFileDocument 的应用程序中打开新文档窗口?
背景
此 macOS 应用程序以编程方式打开 WindowGroups使用 .handleEvents(:) .不幸的是,这会产生一个文件/新建菜单,该菜单将这些窗口组的名称包装为“新建...窗口”(如图)。由于找不到覆盖该包装的方法,我尝试仅使用 CommandGroup(replacing: .newItem) {} 完全替换“新建”按钮及其菜单。 .
然而,我也未能重新制作“创建并打开新文档窗口”命令。我试过搜索一些通知来发布和应用 .handleEvents .那只会使现有的打开文档窗口成为关键窗口。没有打开的文档,它什么都不做。
不需要的包装
enter image description here

@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: ...)
}
}
坚持接线“新项目”更换
enter image description here
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

...
}
}

最佳答案

不错,经典。贴出来然后解决了。解决方案只是回到共享的 NSDocumentController 并要求一个新文档。我会在角落里脸红。

Button("New Project") {
NSDocumentController.shared.newDocument(nil)
}

关于macos - 在 SwiftUI DocumentGroup macOS 中创建并打开一个新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67442343/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com