Изменение приписанной строки

NSMutableAttributedString объявляет много методов для изменения и символы и атрибуты. Необходимо заботиться для не изменения значений атрибута после того, как они были переданы приписанной строке. Вы, возможно, также должны восстановить несоответствия, которые могут быть представлены, если Вы изменяете приписанную строку.

Изменение атрибутов

NSMutableAttributedString объявляет много методов для изменения и символы и атрибуты, такие как примитив replaceCharactersInRange:withString: и setAttributes:range:, или более удобные методы addAttribute:value:range:, applyFontTraits:range:, и т.д.

Следующий пример иллюстрирует, как указать атрибут ссылки для выбранного диапазона в приписанной строке, подчеркнуть текст и окрасить его в синий. Обратите внимание на то, что можно определить любое значение, Вы хотите для атрибута ссылки, Вам решать интерпретировать значение, когда ссылка выбрана — видят Атрибуты Доступа — обычно, однако, Вы используете или строку или URL. Для объяснения роли beginEditing и endEditing (показанный в выборке), посмотрите Несоответствия Фиксации.

NSMutableAttributedString *string; // assume string exists
NSRange selectedRange; // assume this is set
 
NSURL *linkURL = [NSURL URLWithString:@"http://www.apple.com/"];
 
[string beginEditing];
[string addAttribute:NSLinkAttributeName
               value:linkURL
               range:selectedRange];
 
[string addAttribute:NSForegroundColorAttributeName
               value:[NSColor blueColor]
               range:selectedRange];
 
[string addAttribute:NSUnderlineStyleAttributeName
               value:[NSNumber numberWithInt:NSSingleUnderlineStyle]
               range:selectedRange];
[string endEditing];

Значения атрибута, присвоенные приписанной строке, становятся свойством той строки и не должны быть изменены “позади приписанной строки” другими объектами. Выполнение так может представить противоречивый внутреннее состояние приписанной строки. Существует две главных причины для этого:

Если Вы должны изменить значения атрибута и уверены, что изменение применится к корректному диапазону, существует две стратегии, которые можно принять:

Фиксация несоответствий

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

Расширения Набора Приложения NSMutableAttributedString определите методы для фиксации этих несоответствий, поскольку внесены изменения. Это позволяет атрибутам быть очищенными на низком уровне, скрывая потенциальные проблемы от более высоких уровней и предусматривая очень чистое обновление дисплея, когда изменяются атрибуты. Существует четыре метода для фиксации атрибутов и два группе, редактирующей изменения:

Первый метод, fixAttributesInRange:, вызывает другие три fix... методы для очистки удаленных присоединяемых ссылок, атрибутов шрифта и атрибутов абзацев, соответственно. Описания отдельного метода объясняют, что очистка влечет за собой для каждого случая.

NSMutableAttributedString обеспечивает beginEditing и endEditing методы для подклассов NSMutableAttributedString переопределять. Эти методы позволяют экземплярам подкласса записывать или буферизовать группы изменений и очищать себя при получении endEditing сообщение. endEditing метод также позволяет получателю уведомлять любых наблюдателей, что это было изменено. NSTextStorageреализация endEditing, например, фиксирует измененные атрибуты и затем уведомляет его менеджеров по расположению, что они должны передать и восстановить изображение своего текста. Реализации по умолчанию ничего не делают.