iOS UITextInput 控件 : Receiving forward-delete key from hardware keyboard

标签 ios swift xamarin.ios keyboard uitextinput

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

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

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

两个问题:

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

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

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

仅供引用,这段代码是用 C# 编写的,但也欢迎用 Swift 或 Objective-C 回答第 (2) 部分的问题。

(我目前最好的猜测可能是尝试弄乱 this question 中的代码?——似乎真的很头疼,只是为了获得这个相当常见的 key ?)

更新:

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

最佳答案

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

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

objective-C :

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

关于iOS UITextInput 控件 : Receiving forward-delete key from hardware keyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57634683/

相关文章:

ios - 推送 UINavigationController

ios - Swift 无法从 parse.com 检索图像

c# - 使按钮打开超链接

c# - 通过 Azure NotificationHub REST Api 从设备发送推送通知

ios - 更改 DetailViewController Swift 中的数据

ios - 尝试使用 Card.io-iOS-SDK 扫描卡时应用程序崩溃。

Swift UIDatePicker 不显示初始值

ios - Sendbird 未收到推送通知

ios - 如何检查是否已设置类的所有可选成员?

ios - 从弹出 ViewController Swift 继续