为什么 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 没有按预期工作。请注意,只有在文本字段中使用建议时,这才会成为问题。