Как переназначить сочетания клавиш 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])
    }
}
Другие вопросы по тегам