Почему InsertText из UITextInput нарушает предложения клавиатуры?
Так что недавно у нас возникла проблема с нашим расширением Keyboard, показывающим неправильные предложения в прилагаемом приложении. Мы выяснили, что текст вернулся из контекста (super.textDocumentProxy.documentContextBeforeInput
) все было неправильно, и поскольку это встроенный компонент apple, что-то должно идти не так с вставкой текста. У нас была следующая реализация для вставки текста:
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];
}
Вернул бы что-то вроде:
Там.,,
Хотя реальный текст будет примерно таким:
Там это было Это был маленький тест. Испытание всего.
1 ответ
Проблема была найдена с insertText
очевидно, он будет правильно вставлять текст, но контекст клавиатуры не сможет прочитать вставленный текст. Теперь исправить было просто использовать replaceCharactersInRange
для обеих вставок (имеется в виду предложение if / else):
[self.textView.textStorage replaceCharactersInRange:replaceRange withString:selectedWord];
[textView setSelectedRange:NSMakeRange(newLocation, 0)]; //Place cursor after inserted word
Это решило проблему и заставило нас заключить, что insertText не работает, как предполагалось. Обратите внимание, что это будет проблемой, только если предложения будут использоваться в текстовом поле.