У меня есть библиотека, которую я создаю, которая должна отслеживать ввод текста в UITextView, чтобы отслеживать положения определенных разделов текста. Большинство случаев обрабатываются нормально в методе textView(_:shouldChangeTextIn:replacementText:)
. Проблема, с которой я сталкиваюсь, состоит в том, что некоторые клавиатуры имеют комбинации символов, которые фактически изменяют символ без вызова метода textView(_:shouldChangeTextIn:replacementText:)
. Простой пример этого: если вы выберете вьетнамскую клавиатуру и наберете uw
, она изменится на ú
, но единственные вызовы textView(_:shouldChangeTextIn:replacementText:)
будут для ввода u и w. Расчет смещения будет неправильным в этой точке. Насколько я могу судить, нет другого метода, который я мог бы использовать, чтобы узнать об этом изменении. Я не уверен, является ли это ошибкой или нет. Будет вызван метод textViewDidChange, но я надеялся избежать хакерской логики, где я сравниваю предыдущий и новый текст textView, чтобы определить любые изменения и настроить там логику. Если у кого-то есть предложения, я буду рад их услышать. Надеюсь, кто-то видел и решил эту проблему. Благодарю.
Чтобы уточнить, мне нужно разобраться с этой ситуацией, используя что-то, кроме подклассов.
Пример проекта: https://github.com/szweier/ShouldChangeTextInRange
Если вы запустите приведенный выше код и выберете вьетнамскую клавиатуру для ввода uw
, вы увидите, что строка, сгенерированная в методе textView(_:shouldChangeTextIn:replacementText:)
, будет отличаться от текста в textView.