Я боролся с этой проблемой в течение некоторого времени. Надеясь, кто-то с большим знанием смелости TextKit на iOS, может помочь объяснить процесс и привести меня к решению этой проблемы.
Когда проверка правописания включена в UITextView, iOS выявляет орфографические ошибки и добавляеткрасные пунктирные линии под подозрительными словами, и эти слова можно нажать, чтобы предложить варианты замены.
Мое приложение использует UITextView с пользовательским слоем TextKit и пользовательским подклассом NSTextStorage для подсветки синтаксиса. Моя реализация как-то конфликтует с процессом проверки орфографии. Симптомы следующие:
- Пользователь вводит слово с ошибкой.
- iOS идентифицирует орфографическую ошибку и добавляет красную пунктирную линию.
- Пользователь продолжает вводить следующее словои красная пунктирная линия исчезает.
- Слово сохраняет свой статус "с орфографическими ошибками", так как оно все еще может быть взято и предлагаются предложения по замене, но визуальная индикация проблемы правописания отсутствует.
Вот короткое видео на YouTube, демонстрирующее это в действии:
https://youtu.be/8FqRTpBczOA
Проблема возникает из-за того, что моя реализация подсветки синтаксиса должна расширить диапазон, рассматриваемый для изменений атрибутов,поскольку введенные новые символы могут влиять на окружающие атрибуты. Если я не расширяю диапазон и не обрабатываю эти дополнительные атрибуты, красная пунктирная линия остается (но моя подсветка синтаксиса не работает!).
Я немного поработал над этой проблемой, но не смогчтобы найти документацию, примеры или подробности того, как реализованы красные пунктирные линии, чтобы выяснить, как сохранить их, когда подкласс NSTextStorage обрабатывает обновления атрибутов.
Нет никаких атрибутов, которые я могу идентифицировать в приписанной строке, чтобы представлять ихкрасные пунктирные линии в то время, когда processEditing
вызывается в подклассе NSTextStorage.
Появляется, если я вызываю addAttributes
или setAttributes
в NSTextStorage в processEditing
, он просто останавливается на красной пунктирной линии. ... хотя, как уже упоминалось, однако предложения по замене помечены остаются.
Так в чем же вопрос?
Действительно, я надеюсь получить объяснение того, как и когда в текстовом рендерингепроцесс проверки орфографии вмешивается и как он помечает эти слова с ошибками, чтобы получить красный пунктир лии как мне избежать того, чтобы помечать эту пометку, пока я добавляю атрибуты для поддержки подсветки синтаксиса.
Возможно, на этом есть документы, но мой Google-фу не дает ничего полезного.
Примечания
Этот же стек TextKit не имеет той же проблемы в macOS. Это зависит от iOS.