SwiftUI

2023 年 10 月 1 日

SwiftUI 變更 macOS App 新增視窗快捷鍵

已複製到剪貼板


使用 keyboardShortcut 可變更 macOS app 開新視窗的鍵盤快捷鍵。

SwiftUI 和 macOS
SwiftUI 和 macOS

Scene 的 keyboardShortcut 簡介

Scene 的鍵盤快捷鍵行為跟它的類別有關,如 WindowGroup 和 DocumentGroup 會開新的視窗,而 Window 和 Settings 因為是屬於 Singleton 視窗,只會有一個,所以它們會將視窗帶到最前面。使用鍵盤快捷鍵和直接點擊螢幕上方的功能選單列是一樣的意思。

在 keyboardShortcut 裡可以放 nil,那 macOS 就會使用預設的鍵盤快捷鍵「⌘N」。

@main
struct Example: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .keyboardShortcut(nil)
    }
}
macOS 功能選單中,新增視窗有預設的鍵盤快捷鍵「⌘N」
macOS 功能選單中,新增視窗有預設的鍵盤快捷鍵「⌘N」

如果我們不喜歡預設的「⌘N」想自定義鍵盤快捷鍵,就可以換掉上面例子裡的 nil,自己建立 keyboardShortcut。

標準鍵盤快捷鍵

最基本的標準 shortcut 有兩種:

cancelAction

  • 鍵盤快捷鍵為最左上角的 esc「⎋」
  • 主要用來取消 App 正在執行的事,或關閉提示彈窗
.keyboardShortcut(.cancelAction)

defaultAction

  • 鍵盤快捷鍵為 Return「↩︎」
  • 如果有 Button 正被選取,Return 鍵就是用來點擊的
.keyboardShortcut(.defaultAction)

這兩種之所以會是基本的標準 shortcut,是因為使用者對這兩個鍵都已經有了基本的認知,預期按下去就是會取消或點擊,所以如果我們把這兩個 shortcut 亂放在不相關的功能上,可能會造成使用者操作上的困惑,像開新視窗就不適合用這兩個。

建立自定義鍵盤快捷鍵

在 keyboardShortcut 裡還能透過「點」來指定其他的鍵盤按鍵:

.keyboardShortcut(.upArrow) // 向上箭頭
macOS 功能選單中,將「新增視窗」的鍵盤快捷鍵設成「⌘ ▲」
macOS 功能選單中,將「新增視窗」的鍵盤快捷鍵設成「⌘ ▲」
KeyEquivalent 鍵盤按鍵
.upArrow 向上箭頭
.downArrow 向下箭頭
.leftArrow 向左箭頭
.rightArrow 向右箭頭
.delete 刪除鍵
.escape esc 鍵
.return Enter 鍵
.space 空白鍵
.tab Tab 鍵

或直接使用字串來指定鍵盤按鍵:

.keyboardShortcut("6") // 數字鍵
.keyboardShortcut("X") // 字母鍵

這裡值得注意的是,系統在 shortcut 前會自動幫我們加上「⌘」避免太容易被使用者誤觸鍵盤而觸發,這個東西在 keyboardShortcut 裡叫做 modifier,而預設的 modifier 就是「⌘」。所以我們在使用 .space.tab 時,會發現不如預期,這是因為和系統本身的快捷鍵有衝突,這時我們就必需更改 modifier 以避開衝突。

KeyboardShortcut 的 EventModifiers

完整地設定 keyboardShortcut 會像這樣:

.keyboardShortcut(.space, modifiers: .option)
調整 macOS 鍵盤快捷鍵預設的 EventModifiers
調整 macOS 鍵盤快捷鍵預設的 EventModifiers

「option+空白鍵」就不會和系統有衝突。而 modifier 其實也不只一種。

EventModifiers 鍵盤按鍵
.all 所有可用的 modifier
.capsLock、.shift Shift 鍵
.command ⌘ 鍵
.control Control 鍵
.numericPad 數字鍵
.option Option 鍵

如果我們想一次用多個 modifier,也可以直接給一個 EventModifiers Array。

.keyboardShortcut("N", modifiers: [.command, .option])
macOS Scene keyboardShortcut:command+option+D
macOS 鍵盤快捷鍵搭配多個 EventModifiers

分享文章

已複製到剪貼板

主題文章

查看 SwiftUI

超級感謝

關於 XcodeProject

XcodeProject 創立於 2023,致力於協助開發者探索 Apple 的創新世界,學習在 iOS、iPadOS、macOS、tvOS、visionOS 與 watchOS 上開發 App,發現眾多技術與框架,讓開發者獲得更多能力。


Contacts

Ricky Chuang

XcodeProject

RickyChuang.xcodeproj@gmail.com

XcodeProject 聯絡

contact.xcodeproj@gmail.com

最新文章