自定义键盘:获取所选文本

时间:2014-10-04 09:28:26

标签: ios delegates custom-keyboard

从我的Custom Keyboard我想知道用户是否在其文本中选择了某些内容(及其范围)。根据文档,我认为我可以利用UITextInputDelegate协议提供的回调:

  • selectionWillChange(textInput:UITextInput)
  • selectionDidChange(textInput:UITextInput)
  • textWillChange(textInput:UITextInput)
  • textDidChange(textInput:UITextInput)

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

  

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


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