Альтернатива UITextView

Как я понял из документов Apple, свойство attributedText UITextView:

По умолчанию это свойство равно нулю. Присвоение нового значения этому свойству также заменяет значение свойства text теми же строковыми данными, хотя и без какой-либо информации о форматировании. Кроме того, присвоение нового значения a обновляет значения в свойствах font, textColor и textAlignment, чтобы они отражали информацию о стиле, начиная с позиции 0 в атрибутированной строке.

Поэтому я не могу добавить attributedString по коду с несколькими атрибутами в разных местах.

Может ли кто-нибудь помочь мне создать следующий эффект с помощью кода в iOS6? Это возможно с использованием файлов пера и изменения атрибутов диапазона для текстовых частей в UITextView, но я не могу воспроизвести эффект с помощью кода.

‹'Font systemFontOfSize = 18> Желаемый‹' / font> эффект ‹'textColor = [UIColor redColor]> для записи b‹' / textColor> код y.

Предположим, теги соответствуют атрибутам.

P.S. Я не хочу использовать CATextLayers, поскольку я пытаюсь использовать функцию AutoLayout с UITextView.


person Marc Matta    schedule 18.12.2012    source источник
comment
Вы видели DTCoreText: github.com/Cocoanetics/DTCoreText?   -  person Numan Tariq    schedule 18.12.2012
comment
Поддерживаю это сообщение! (будучи сопровождающим этого прекрасного проекта)   -  person Cocoanetics    schedule 21.12.2012


Ответы (1)


Вы можете создать NSAttributedString с NSDictionary, содержащим все необходимые атрибуты:

NSAttributedString* attString = [[NSAttributedString alloc] 
               initWithString: @"Desired effect to be written by code" 
                   attributes: (NSDictionary*)attributes];

Или используйте его изменяемый подкласс NSMutableAttributedString:

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc]  
               initWithString: @"Desired effect to be written by code"];

    [attString addAttribute: NSForegroundColorAttributeName 
                      value: [UIColor redColor] 
                      range: NSMakeRange(15,15)];

... и т. д.
тогда ...

myTextView.attributedText = attString;

Каждый атрибут применяется к NSRange (местоположению, длине) строки. Различные типы атрибутов (например, цвет, размер шрифта) могут перекрывать разные диапазоны.

update
Используйте пример NSMutableAttributedString. NSAttributedString's initWithString:attributes будет применять атрибуты ко всему диапазону строки, чего вы пытаетесь избежать, извините за путаницу.

person foundry    schedule 18.12.2012
comment
У меня есть следующая проблема: у меня есть подкласс UITextView с 3 свойствами NSMutableAttributedString. Я добавляю атрибутные строки к этим свойствам на заданных этапах приложения, и после каждой операции добавления я меняю attributedText подкласса UITextView на свойство, которое я использовал для добавления новой атрибутированной строки. Если я выполняю NSLog для свойств, я вижу атрибуты, поступающие из добавленных мной NSAttributedStrings, но установка attributedText после этой операции для свойства, которое я использовал, не имеет того же эффекта, что и код, который вы разместили выше. Есть идеи, почему? - person Marc Matta; 18.12.2012
comment
Просто понял, в чем проблема, снова вернувшись к документации Apple из того, что я написал в моем первом вопросе. Назначение нового значения этому ... значениям в свойствах font, textColor и textAlignment, чтобы они отражали информацию о стиле, начиная с позиции 0 в атрибутированной строке. Поэтому решение для меня заключалось в том, чтобы предоставить каждую из NSAttributedStrings, которые я добавляю их атрибуты, и не оставлять массив атрибутов пустым. Спасибо за помощь @hewas - person Marc Matta; 18.12.2012