Keyboard Shortcuts (macOS)
Every primary action in a macOS app MUST have a keyboard shortcut.
Button Shortcuts
Button("Save") { save() }
.keyboardShortcut("s", modifiers: .command)
Button("New") { createNew() }
.keyboardShortcut("n", modifiers: .command)
Button("Delete") { deleteSelected() }
.keyboardShortcut(.delete, modifiers: .command)
Button("Find") { showSearch() }
.keyboardShortcut("f", modifiers: .command)
Menu Bar — CommandMenu (custom menu)
Add custom menus to the menu bar via .commands { } on a Scene:
WindowGroup {
ContentView()
}
.commands {
CommandMenu("Items") {
Button("New Item") { createItem() }
.keyboardShortcut("n", modifiers: .command)
Button("Duplicate") { duplicateItem() }
.keyboardShortcut("d", modifiers: .command)
Divider()
Button("Delete") { deleteItem() }
.keyboardShortcut(.delete, modifiers: .command)
}
}
Menu Bar — CommandGroup (extend system menus)
.commands {
CommandGroup(after: .newItem) {
Button("New from Template") { newFromTemplate() }
.keyboardShortcut("t", modifiers: [.command, .shift])
}
}
Common Shortcuts Reference
| Action | Shortcut | |--------|----------| | New | Cmd+N | | Save | Cmd+S | | Delete | Cmd+Delete | | Find | Cmd+F | | Select All | Cmd+A | | Undo | Cmd+Z | | Preferences | Cmd+, |
Rules
- Every primary action MUST have
.keyboardShortcut() - Use
CommandMenufor app-specific menus,CommandGroupto extend system menus CommandMenuandCommandGroupgo inside.commands { }modifier on a Scene — NEVER directly in@SceneBuilder body- Follow Apple's standard shortcut conventions (Cmd+S for save, Cmd+N for new, etc.)
- Use modifier combinations for secondary actions (Cmd+Shift+N, Cmd+Option+D)
微信扫一扫