提问人:ScottM 提问时间:9/30/2023 更新时间:9/30/2023 访问量:48
如何在 SwiftUI 原生 App 中重新映射 macOS 默认键盘快捷键
How to remap macOS default keyboard shortcuts in a SwiftUI native app
问:
我正在使用 SwiftUI 构建一个适用于 iOS、iPadOS 和 macOS 的多平台 app。macOS 应用程序将是本机应用程序,而不是使用 Catalyst。
该应用程序具有许多不同的数据类型可以添加,其主体是事件类型。我想将它们添加为“文件”菜单中的子菜单,其中最常用的新事件操作以 ⌘N 的形式提供。
该键盘快捷键当前映射到“新建窗口”内置菜单操作。我想保留该操作,但将其键盘快捷键重新映射到 ⌘⇧N。
但是,我看不出该怎么做。
目前,我有一个定义如下的命令集(带有一个环境对象,用于处理相关面板的显示和导航):
struct NewItemCommands: Commands {
@EnvironmentObject private var appNavigation: AppNavigation
var body: some Commands {
CommandGroup(before: .newItem) {
Menu("New") {
Button("Event", action: appNavigation.newEvent)
.keyboardShortcut("N")
Button("Genre", action: appNavigation.newGenre)
Button("Publication", action: appNavigation.newPublication)
Button("Venue", action: appNavigation.newVenue)
}
.disabled(appNavigation.isShowingModal)
}
}
}
这给了我我想要的子菜单,并为“新>事件”分配了正确的快捷方式。但是,新窗口的默认快捷方式仍然存在,但永远不会得到响应:
有没有办法重新映射新窗口的快捷方式 - 或者有一种方法可以创建一个具有相同功能的新命令,我可以用它来替换默认值,并分配我自己的快捷方式?
答:
1赞
Sweeper
9/30/2023
#1
您可以使用代替 .传入以替换“新窗口”菜单项,然后添加您自己的实现,使用 .CommandGroup(replacing:)
CommandGroup(before:)
.newItem
keyboardShortcut(...)
.commands {
CommandGroup(replacing: .newItem) {
Menu("New") {
Button("Event", action: {...})
.keyboardShortcut("N")
Button("Genre", action: {...})
Button("Publication", action: {...})
Button("Venue", action: {...})
}
Button("New Window") {
// get this with @Environment(\.openWindow) var openWindow
// and give your WindowGroup some id
openWindow(id: "Some ID")
}.keyboardShortcut("N", modifiers: [.command, .shift])
}
}
评论