Я создаю UITextView
для использования в качестве элементарной IDE.Когда пользователь вставляет текст (код), я изменяю его так, чтобы он вписывался в строку (правильно с отступом) с другим текстом.Однако я также раскрашиваю текст (attributedText
), используя метод textViewDidChange
.В результате, когда я вставляю текст, он сначала вставляется, а затем корректируется внутри строки.Процесс выглядит немного странно, особенно для большого фрагмента текста.Мне было интересно, есть ли способ поймать, что текст вставляется в textViewDidChange
, чтобы избежать изменения атрибутов до тех пор, пока текст не будет изменен.Обратите внимание, что атрибуты окраски в методе textView shouldChangeTextIn
невозможны, так как я реализую некоторое пользовательское поведение посредством взаимодействия двух методов, и добавление атрибутов необходимо выполнить на этапе textViewDidChange
.
ПРИМЕР НАСТРОЙКИ
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if (text == UIPasteboard.general.string) {
// MODIFY PASTABLE TEXT HERE
// INSERT MODIFIED TEXT
textView.replace(textRange, withText: newText)
// PREVENT OLD TEXT FROM BEING INSERTED
return false
}
}
func textViewDidChange(_ textView: UITextView) {
// MANAGE ATTRIBUTES
}
НЕПРАВИЛЬНОЕ ПОВЕДЕНИЕ