6

Custom Keyboard想知道用户是否在他们的文本中选择了一些东西(以及它的范围)。按照文档,我认为我可以利用UITextInputDelegate协议提供的回调:

  • selectionWillChange(文本输入:UITextInput)
  • selectionDidChange(文本输入:UITextInput)
  • textWillChange(textInput: UITextInput)
  • textDidChange(文本输入:UITextInput)

但是,selectionWill/DidChange永远不会调用回调。如果我更改文本中的选择,则会触发其他回调 ( textWill/DidChange)。由于这已经很奇怪,我遇到的问题是textInput参数始终为零。但我需要它,因为我想访问selectedTextRange以解决我的问题。

任何想法如何在自定义键盘实现中检索当前选定的文本和/或其范围?

4

1 回答 1

4

如果我没有完全错,这是不可能的。(您指的是 iOS 8 上自己的键盘应用程序;不是在您自己的应用程序中实现您自己的键盘,对吗?)

您的键盘无法访问用户实际编写的文本,因为 UITextView 位于完全不同的应用程序中。

资料来源:https ://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html - “自定义键盘无法使用系统键盘功能”,第 7 段

因为自定义键盘只能在其 UIInputViewController 对象的主视图中绘制,所以它不能选择文本。文本选择由使用键盘的应用程序控制。如果该应用程序提供编辑菜单界面(例如用于剪切、复制和粘贴),则键盘无法访问它。自定义键盘无法在插入点附近提供内联自动更正控件。


如果您在自己的应用程序中引用自己的实现:您是否在 IB 中选择了正确的类作为文本字段委托?你有没有把 UITextInputDelegate 添加到类的头文件中(你是用英文这样写的吗?)?然后你的委托方法应该被调用......还有一些示例代码可能很有用;)

于 2014-10-13T08:04:40.240 回答