3

我已经实现了一个复杂的 UITextInput,它在 iOS 上运行良好,但缺少一个功能:

  • 当用户连接了硬件键盘(至少在模拟器中)并且没有选择任何文本并按下 Forward Delete 时,什么也没有发生。

请注意,我指的不是 Mac 上标记为 Delete 的键,它只是一个 Backspace 键——使用 UIKeyInput deleteBackward 方法的实现已经可以正常工作。

两个问题:

  1. iOS 是否可以正确处理 Forward Delete(例如,带有 Fn + Delete 的蓝牙 Mac 硬件键盘不是 Backspace,而是 Forward Delete)。这适用于我的 Mac 笔记本电脑吗?(答案似乎是肯定的,因为我刚刚在 Safari 的模拟器中的硬件键盘(我的主机 Mac 开发机器)上测试了 Forward Delete。)

  2. 如果在其他应用程序中可能并且很常见,我该如何拦截这个关键命令?我找不到要作为字符串发送的内容来创建 UIKeyCommand,也找不到任何有意义的 API 方法以简单的方式执行此操作。

另请注意,在此自定义文本编辑器中选择文本并按 Forward Delete 键已经正常工作,因此 iOS 似乎知道此键。

仅供参考,此代码使用 C#,但也欢迎使用 Swift 或 Objective-C 回答第 (2) 部分。

(我目前最好的猜测可能是尝试弄乱这个问题中的代码?- 只是为了得到这个相当常见的密钥似乎真的很头疼?)

更新:

现在按 Delete(右键删除而不是退格键)在 iOS 上以某种方式工作,至少在模拟器上是这样。这可能是 TextInput 系统中的一个错误,因为现在当我按下右键删除键时,系统调用我的代码来选择光标右侧的单个字符,然后调用我的 DeleteBackwards 代码来删除选择(哪个代码知道如何删除选定的文本)。奇怪但很高兴这现在按预期工作,“开箱即用”。

4

1 回答 1

1

您可以使用 Unicode 代码点0x7f,例如在 Swift 中:

UIKeyCommand(input: "\u{7f}", modifierFlags: [], action: #selector(forwardDelete))

目标-C:

[UIKeyCommand keyCommandWithInput:[NSString stringWithFormat:@"%C", 0x7f] modifierFlags:0 action:@selector(forwardDelete)]
于 2021-05-24T15:54:09.303 回答