为什么 UITextInput 中的 InsertText 会破坏键盘建议?
Why does InsertText from UITextInput breaks keyboard suggestions?
所以我们最近遇到了一个问题,我们的键盘扩展在随附的应用程序中显示了错误的建议。我们发现从上下文 (super.textDocumentProxy.documentContextBeforeInput
) 编辑的文本 return 都是错误的,并且由于它是苹果组件中的内置文本插入,所以一定有问题。我们有以下插入文本的实现:
if (replaceRange.length > 0) {
[self.textView.textStorage replaceCharactersInRange:replaceRange withString:selectedWord];
[textView setSelectedRange:NSMakeRange(newLocation, 0)]; //Place cursor after inserted word
} else {
[self.textView insertText:selectedWord];
}
会 return 是这样的:
There. . .
虽然真实的文字是这样的:
There it was. It was a little test. Test of everything.
发现问题出在 insertText
显然它会正确插入文本,但键盘上下文将无法读取插入的文本。现在的解决方法是简单地使用 replaceCharactersInRange
进行两次插入(意味着没有 if / else 子句):
[self.textView.textStorage replaceCharactersInRange:replaceRange withString:selectedWord];
[textView setSelectedRange:NSMakeRange(newLocation, 0)]; //Place cursor after inserted word
这解决了问题,并使我们得出结论,insertText 没有按预期工作。请注意,只有在文本字段中使用建议时,这才会成为问题。
所以我们最近遇到了一个问题,我们的键盘扩展在随附的应用程序中显示了错误的建议。我们发现从上下文 (super.textDocumentProxy.documentContextBeforeInput
) 编辑的文本 return 都是错误的,并且由于它是苹果组件中的内置文本插入,所以一定有问题。我们有以下插入文本的实现:
if (replaceRange.length > 0) {
[self.textView.textStorage replaceCharactersInRange:replaceRange withString:selectedWord];
[textView setSelectedRange:NSMakeRange(newLocation, 0)]; //Place cursor after inserted word
} else {
[self.textView insertText:selectedWord];
}
会 return 是这样的:
There. . .
虽然真实的文字是这样的:
There it was. It was a little test. Test of everything.
发现问题出在 insertText
显然它会正确插入文本,但键盘上下文将无法读取插入的文本。现在的解决方法是简单地使用 replaceCharactersInRange
进行两次插入(意味着没有 if / else 子句):
[self.textView.textStorage replaceCharactersInRange:replaceRange withString:selectedWord];
[textView setSelectedRange:NSMakeRange(newLocation, 0)]; //Place cursor after inserted word
这解决了问题,并使我们得出结论,insertText 没有按预期工作。请注意,只有在文本字段中使用建议时,这才会成为问题。