【问题标题】:iOS UITextInput control: Receiving forward-delete key from hardware keyboardiOS UITextInput 控件:从硬件键盘接收前向删除键
【发布时间】:2019-12-29 06:34:51
【问题描述】:

我已经实现了一个复杂的 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) 部分。

(我目前最好的猜测可能是尝试弄乱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


【解决方案1】:

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

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

目标-C:

[UIKeyCommand keyCommandWithInput:[NSString stringWithFormat:@"%C", 0x7f] modifierFlags:0 action:@selector(forwardDelete)]

【讨论】:

  • 我测试了这个并且我的选择器没有被触发:-(我相信这个代码实际上相当于我上面的一个 cmets,在问题下面,正如我所说我尝试了所有 Unicode 代码点0 到 20,000 和 127,特别是 == 0x7f)。请参阅我的问题的更新。
  • 我已经测试过了,它确实有效。这是一个示例项目:mega.nz/file/…
  • 我 DLed 和编译并且您的测试项目确实可以工作,但是该项目忽略了我的问题上下文中非常重要的部分,即自定义 UITextInput 控件部分。以这种方式与系统交互是非常复杂的。见:developer.apple.com/documentation/uikit/uitextinput
  • 是的,我可以确认其他键命令在文本字段中有效,但不能向前删除。我不确定是否有解决方案,抱歉。最好的选择是与 Apple 开设 TSI
猜你喜欢
  • 2016-12-26
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多