0

所以我们最近遇到了一个问题,我们的键盘扩展在随附的应用程序中显示了错误的建议。我们发现从 context ( super.textDocumentProxy.documentContextBeforeInput) 返回的文本都是错误的,并且由于它是内置的苹果组件,因此文本插入肯定有问题。我们有以下插入文本的实现:

    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];
    }

会返回类似:

那里。. .

而真正的文本会是这样的:

就在那里。这是一个小测试。测试一切。

4

1 回答 1

0

发现问题insertText显然是它会正确插入文本,但键盘上下文将无法读取插入的文本。现在修复只是使用replaceCharactersInRangefor 两个插入(意味着没有 if / else 子句):

[self.textView.textStorage replaceCharactersInRange:replaceRange withString:selectedWord];
        [textView setSelectedRange:NSMakeRange(newLocation, 0)];  //Place cursor after inserted word

这解决了这个问题,并使我们得出结论 insertText 不能按预期工作。请注意,只有在文本字段中使用建议时,这才会成为问题。

于 2017-06-06T08:49:51.887 回答