iOS/Catalyst如何实现键盘快捷键自定义分组功能
自定义iOS应用快捷键分组功能说明
iOS 15及以上版本完全支持自定义应用的键盘快捷键分组展示,不需要依赖私有API,直接使用系统提供的公开接口即可实现。
具体实现步骤
- 创建
UIKeyCommandGroup对象(iOS 15新增的公开类),每个对象对应一个快捷键分组,可通过title参数指定分组名称,children参数传入该分组下所有的UIKeyCommand实例 - 重写对应视图控制器的
keyCommands属性的Getter方法,直接返回包含UIKeyCommandGroup对象的数组即可,系统会自动识别分组并在长按CMD弹出的列表中按分组渲染 - 可选操作:如果需要多层级分组,可以将子
UIKeyCommandGroup作为父分组的children元素传入,系统支持最多3层嵌套展示
完整实现示例
// 声明单个快捷键实例 private let copyCommand = UIKeyCommand( title: "复制内容", action: #selector(copyAction), input: "c", modifierFlags: .command ) private let pasteCommand = UIKeyCommand( title: "粘贴内容", action: #selector(pasteAction), input: "v", modifierFlags: .command ) private let backCommand = UIKeyCommand( title: "返回上页", action: #selector(backAction), input: UIKeyCommand.inputEscape, modifierFlags: [] ) // 重写keyCommands属性返回带分组的快捷键列表 override var keyCommands: [UIKeyCommand]? { // 兼容iOS15以下版本,直接返回单个快捷键数组 guard #available(iOS 15.0, *) else { return [copyCommand, pasteCommand, backCommand] } // 构建编辑操作分组 let editGroup = UIKeyCommandGroup( title: "编辑操作", children: [copyCommand, pasteCommand] ) // 构建导航操作分组 let navGroup = UIKeyCommandGroup( title: "导航操作", children: [backCommand] ) // 返回分组数组,系统会自动解析分组 return [editGroup, navGroup] } // 快捷键对应的触发方法 @objc private func copyAction() { // 复制逻辑 } @objc private func pasteAction() { // 粘贴逻辑 } @objc private func backAction() { // 返回逻辑 }
注意事项
- 所有需要在快捷键列表中展示的
UIKeyCommand必须显式设置title属性,否则不会在弹窗中显示 - 系统自带的System分组是全局默认展示的,不需要开发者手动添加
- 分组的排序和你在
keyCommands数组中返回的顺序一致,系统不会主动调整排序
内容的提问来源于stack exchange,提问作者Kaven
相关产品推荐
相关产品推荐

