Поддерживать отмену в модифицированном, связанном, NSAttributedString

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

Как я могу сохранить отмену? Я сохранил позицию курсора, вызвав методы selectedRanges и setSelectedRanges: textView по обе стороны от установщика, но это все еще кажется немного хакерским.

Мне не удалось привязать текстовое представление напрямую к изменяемой атрибутивной строке, но кажется, что должен быть более прямой способ изменить связанную строку, чтобы она не мешала редактированию.

PS, добавление атрибутов происходит после завершения метода KVO вызовом -performSelectorOnMainThread:. Это был единственный способ отобразить добавленные атрибуты.


person MacRae Linton    schedule 10.10.2009    source источник


Ответы (1)


[self setTextView:mutableAttributedString]

Простите? Вы устанавливаете textView в строку с атрибутами? Разве не было бы более разумно сохранить текстовое представление там?

Попробуйте получить textStorage текстового представления и заменить его содержимое новой строкой с атрибутами, отправив текстовому хранилищу сообщение setAttributedString:.

person Peter Hosey    schedule 11.10.2009
comment
Извините, это было неясно, и я изменил это, чтобы сделать его более понятным. У меня есть текстовое представление, связанное с атрибутированной строкой, поэтому я вызываю установщик string's, а не установщик для самого текстового представления. - person MacRae Linton; 13.10.2009