关于Maccatalyst键盘操作问题
开发Mac catalyst应用时, 如果有键盘操作, 就会很帅.
key
我们可以新建一个简单的空白项目, 然后重写控制器的
func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) 方法, 打印按键的基本属性, 比如
override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
for press in presses {
guard let key = press.key else {
return
}
print("========= pressesBegan \(press)")
}
super.pressesBegan(presses, with: event)
}
获取按键特征
然后我们根据press.key属性, 整理常用按键比如上下左右,WASD, back, enter等.
这里面有两种方法:
1. key.charactersIgnoringModifiers
/// @returns a string representing which characters would be inserted into a text field when this key is
/// pressed, not taking any held modifiers into account.
/// @discussion for Latin based languages, expect this to be always in lowercase (unmodified meaning not
/// taking shift key into account). If only a modifier key was pressed, this property will contain an empty string.
open var charactersIgnoringModifiers: String { get }
这个方法返回一个字符串(可以参考UIKeyCommand), 具体的可以去搜一下这个属性的更多解释. 该方法有个缺点就是不够清晰
switch key.charactersIgnoringModifiers {
case UIKeyCommand.inputDelete:
self.pressBack()
case UIKeyCommand.f2:
self.pressF2()
case UIKeyCommand.f5:
self.pressF5()
case "\u{7F}":
// 等价于 key.keyCode == UIKeyboardHIDUsage.keyboardDeleteForward
self.pressDelete()
case UIKeyCommand.inputLeftArrow:
self.pressLeft()
case UIKeyCommand.inputRightArrow:
self.pressRight()
case UIKeyCommand.inputUpArrow:
self.pressUp()
case UIKeyCommand.inputDownArrow:
self.pressDown()
default: break
}
2. key.keyCode
/// @returns the raw HID usage code for the pressed key. See UIKeyConstants.h.
open var keyCode: UIKeyboardHIDUsage { get }
这是一个枚举(具体可以查看这个枚举UIKeyboardHIDUsage), 我们处理起来就轻松很多.
// 键盘的enter 数字键盘的enter
switch key.keyCode {
case UIKeyboardHIDUsage.keyboardReturnOrEnter: // 大键盘的enter键
fallthrough
case UIKeyboardHIDUsage.keypadEnter: // 数字键盘的enter
didHandleEvent = true
self.pressReturnOrEnter()
case UIKeyboardHIDUsage.keyboardDeleteForward: // 大键盘的delete键
fallthrough
case UIKeyboardHIDUsage.keypadPeriod: // 数字键的delete
didHandleEvent = true
self.pressDelete()
case UIKeyboardHIDUsage.keyboardDeleteOrBackspace: // 删除键, back
didHandleEvent = true
self.back()
case UIKeyboardHIDUsage.keyboardF2: // F2
didHandleEvent = true
self.pressF2()
case UIKeyboardHIDUsage.keyboardF5: // F5
didHandleEvent = true
self.pressF5()
case UIKeyboardHIDUsage.keyboardD: // D
fallthrough
case UIKeyboardHIDUsage.keypad6: // 数字小键盘6
fallthrough
case UIKeyboardHIDUsage.keyboardRightArrow: // 箭头右
// didHandleEvent = true
self.pressRight()
case UIKeyboardHIDUsage.keyboardA: // A
fallthrough
case UIKeyboardHIDUsage.keypad4: // 数字小键盘4
fallthrough
case UIKeyboardHIDUsage.keyboardLeftArrow: // 箭头左
// didHandleEvent = true
self.pressLeft()
case UIKeyboardHIDUsage.keyboardW: // W
fallthrough
case UIKeyboardHIDUsage.keypad8: // 数字小键盘8
fallthrough
case UIKeyboardHIDUsage.keyboardUpArrow: // 箭头上
didHandleEvent = true
self.pressUp()
case UIKeyboardHIDUsage.keyboardS: // S
fallthrough
case UIKeyboardHIDUsage.keypad2: // 数字小键盘2
fallthrough
case UIKeyboardHIDUsage.keyboardDownArrow: // 箭头下
didHandleEvent = true
self.pressDown()
default: break
}
仅供参考, 剩下的只需要实现自定义的pressFunc即可
iOS相关

浙公网安备 33010602011771号