Как переназначить сочетания клавиш macOS по умолчанию в собственном приложении SwiftUI
Я создаю мультиплатформенное приложение с SwiftUI для iOS, iPadOS и macOS. Приложение 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)
}
}
}
Это дает мне нужное подменю с правильным ярлыком, назначенным New > Event . Однако ярлык по умолчанию в Новом окне остается, но на него никогда не отвечают:
Есть ли способ переназначить этот ярлык для «Нового окна » или способ создать новую команду с идентичной функциональностью, которую я могу использовать для замены команды по умолчанию, назначенной моим собственным ярлыком?
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])
}
}