Почему 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 не работает, как предполагалось. Обратите внимание, что это будет проблемой, только если предложения будут использоваться в текстовом поле.

Другие вопросы по тегам