【发布时间】:2019-12-29 06:34:51
【问题描述】:
我已经实现了一个复杂的 UITextInput,它在 iOS 上运行良好,但缺少一个功能:
- 当用户连接了硬件键盘(至少在模拟器中)并且没有选择任何文本并按下 Forward Delete 键时,没有任何反应。
请注意,我不是指 Mac 上标记为 Delete 的键,它只是一个 Backspace 键 - 使用 UIKeyInput deleteBackward 方法的实现已经可以正常工作。
两个问题:
-
iOS 是否可以正确处理 Forward Delete(例如,带有 Fn + Delete 的蓝牙 Mac 硬件键盘不是 Backspace,而是 Forward Delete)。这适用于我的 Mac 笔记本电脑吗? (答案似乎是肯定的,因为我刚刚在 Safari 模拟器中的硬件键盘(我的主机 Mac 开发机器)上测试了 Forward Delete。)
-
如果在其他应用程序中可能且常见,我如何拦截此键命令?我找不到要作为字符串发送的内容来创建 UIKeyCommand,也找不到任何有意义的 API 方法可以轻松地执行此操作。
另请注意,在此自定义文本编辑器中选择文本并按下 Forward Delete 键已正常工作,因此 iOS 似乎知道此键。
仅供参考,此代码使用 C#,但也欢迎使用 Swift 或 Objective-C 回答第 (2) 部分。
(我目前最好的猜测可能是尝试弄乱this question 中的代码?- 似乎只是为了获得这个相当通用的密钥而令人头疼?)
更新:
现在按 Delete(右键删除而不是退格键)在 iOS 上可以正常工作,至少在模拟器上是这样。这可能是 TextInput 系统中的一个错误,因为现在当我按下右键删除键时,系统调用我的代码来选择光标右侧的单个字符,然后调用我的 DeleteBackwards 代码来删除选择(哪个代码知道如何删除选定的文本)。奇怪但很高兴这现在可以按预期工作,“开箱即用”。
【问题讨论】:
-
其他有用的指针可能包括:如果我设置了一个,我已经在 UITextInput 中实现的哪些方法可能会遇到断点?我已经尝试了很多,但没有看到调试器击中了 Forward Delete 键的任何断点。
-
我还可以确认以下代码没有捕获 Forward Delete,尽管它捕获了大量没有修饰符的键(例如字母、数字、Backspace):for(int i = 1; i
-
我还可以确认代码是 127,因为当我执行 Ctrl+127 或 Cmd+127 时 UIKeyCommand 会触发。也许系统正在捕获转发删除并可能将其转发给我,但我只是不知道在我的代码中的什么位置了解何时或是否发生这种情况。
标签: ios swift xamarin.ios keyboard uitextinput