MacOS开发 使用KeyBoardShortcuts开发快捷键应用的例子
目录
凌顺实验室(lingshunlab.com)这次介绍一个简单,强大,易用的MacOS开发快捷键功能库
KeyboardShortcuts
是一个面向 macOS 的 Swift 包,提供了一种简单的方式来让开发者为他们的应用添加用户可自定义的全局键盘快捷键支持。它允许开发者注册、保持和监听特定的键盘快捷键,进而触发相应的动作。这个库尤其适用于需要提高生产效率的应用,允许用户通过快捷键快速执行常用操作,而不必离开键盘。
主要特性
- 用户自定义:开发者可以定义提供给用户自定义的快捷键选择。
- 易用性:API 设计简单,易于集成和使用。
- 全局快捷键支持:注册后的快捷键即使在应用没有焦点(即在后台运行时)也能触发。
- 保存快捷键配置:用户设置的快捷键配置会被自动保存,应用重启后仍然有效。
Github:https://github.com/sindresorhus/KeyboardShortcuts
使用方法
1,首先,給快捷键注册一个名称,通常会在一个名为「Constants.swift」文件中声明
import KeyboardShortcuts
extension KeyboardShortcuts.Name {
static let toggleUnicornMode = Self("toggleUnicornMode")
}
2,引用这个快捷键
例如,在一个用户需要设置快捷键的视图中引用,假设是一个名为「SettingsScreen.swift」文件
import SwiftUI
import KeyboardShortcuts
struct SettingsScreen: View {
var body: some View {
Form {
KeyboardShortcuts.Recorder("Toggle Unicorn Mode:", name: .toggleUnicornMode)
}
}
}
3,添加用户设置的快捷键的监听器,例如在「XXXApp.swift」文件中(XXX为你的App的项目名称)
@main
struct XXXApp: App {
// 声明AppState()
@StateObject private var appState = AppState()
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
@MainActor
final class AppState: ObservableObject {
init() {
// 为 toggleUnicornMode 的快捷键添加监听器
KeyboardShortcuts.onKeyUp(for: .toggleUnicornMode) { [self] in
print(self)
print("toggle Unicorn Mode in here")
}
}
}
运行效果如图:设置了快捷键之后,按下快捷键则能触发
常见使用实例
1,KeyboardShortcuts获取某快捷键是什么?
使用.getShortcut()
print(KeyboardShortcuts.getShortcut(for: .toggleUnicornMode) ?? "nil")
假设toggleUnicornMode定义了快捷键是F1,则会返回「Optional(f1)」这样的信息。
var description:String = ""
if let shortcut = KeyboardShortcuts.getShortcut(for: .toggleUnicornMode) {
description = "\(shortcut)"
}
let tips = "「\(String(describing: description))」xxxxxxxx"
使用以上方法对Optional进行解包即可去除Optional(),只要其快捷键「f1」字符
2,KeyboardShortcuts在程序中设置快捷键的方法
使用.setShortcut()
KeyboardShortcuts.setShortcut(.init(.f, modifiers: [.command]), for: .toggleUnicornMode)
这样就可以把设置为command+f的快捷键
3,关于初始化时设置默认快捷键的方法
根据文档,作者不建议这么做,使用欢迎界面让用户自定义的确是不错的选择。
文档说这样就能实现初始化时设置默认快捷键
import KeyboardShortcuts
extension KeyboardShortcuts.Name {
static let toggleUnicornMode = Self("toggleUnicornMode", default: .init(.k, modifiers: [.command, .option]))
}
但是,我测试过无法起效,有知道为什么的请关注「凌顺实验室」公众号,告诉一声,万分感谢。