You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SwiftUI原生macOS应用中重映射默认键盘快捷键

解决方案

要实现将⌘N分配给新建Event、⌘⇧N分配给新建窗口的需求,你需要替换系统默认的"新建"命令组,同时保留原生新建窗口的功能,具体实现如下:

核心思路

  1. 使用CommandGroup(replacing: .newItem)完全接管系统默认的"新建"命令区域,避免快捷键冲突导致的无响应问题。
  2. 先添加自定义的"New"子菜单,将⌘N绑定到新建Event操作。
  3. 手动添加自定义的"New Window"命令,调用系统原生API实现新建窗口功能,并绑定⌘⇧N快捷键。

完整代码示例

struct NewItemCommands: Commands {
    @EnvironmentObject private var appNavigation: AppNavigation

    var body: some Commands {
        CommandGroup(replacing: .newItem) {
            // 自定义New子菜单,绑定⌘N到新建Event
            Menu("New") {
                Button("Event", action: appNavigation.newEvent)
                    .keyboardShortcut("N", modifiers: .command)
                Button("Genre", action: appNavigation.newGenre)
                Button("Publication", action: appNavigation.newPublication)
                Button("Venue", action: appNavigation.newVenue)
            }
            .disabled(appNavigation.isShowingModal)
            
            // 自定义New Window命令,绑定⌘⇧N,复用系统原生行为
            Button("New Window") {
                NSApplication.shared.newWindowForTab(nil)
            }
            .keyboardShortcut("N", modifiers: [.command, .shift])
        }
    }
}

关键说明

  • CommandGroup(replacing: .newItem)会移除系统默认的新建窗口命令,彻底解决快捷键冲突问题。
  • NSApplication.shared.newWindowForTab(nil)是系统原生的新建窗口方法,和默认"New Window"的行为完全一致,包括多标签页场景下的逻辑。
  • 明确指定快捷键的modifiers参数,能让绑定逻辑更清晰,避免潜在的歧义。

内容的提问来源于stack exchange,提问作者ScottM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:27:15