У меня есть атрибутированная строка, связанная с NSTextView. Я использую метод, который вызывается (используя KVO) каждый раз, когда строка редактируется, чтобы добавить атрибуты цвета фона в строку на основе совпадения regEx. Я делаю это, создавая новую изменяемую строку атрибутов с -initWithAttributedString:
, затем -beginEditing
, -addAttribute:
, -endEditing
. После того, как я добавил все нужные мне атрибуты цвета фона, я вызываю установщик строки [self setTextViewString:mutableAttributedString]
. Проблема в том, что если к строке на самом деле добавлены какие-либо атрибуты, он убивает отмену и перемещает курсор в конец строки.
Как я могу сохранить отмену? Я сохранил позицию курсора, вызвав методы selectedRanges и setSelectedRanges: textView по обе стороны от установщика, но это все еще кажется немного хакерским.
Мне не удалось привязать текстовое представление напрямую к изменяемой атрибутивной строке, но кажется, что должен быть более прямой способ изменить связанную строку, чтобы она не мешала редактированию.
PS, добавление атрибутов происходит после завершения метода KVO вызовом -performSelectorOnMainThread:
. Это был единственный способ отобразить добавленные атрибуты.