Текст UITextView теряет размер шрифта, когда я устанавливаю атрибут в NSTextStorage с помощью NSUnderlineStyleAttributeName

В моем приложении у меня есть UItextView, и его входное представление имеет дополнительный вид с парой кнопок на нем.

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

Вот что я делаю:

NSRange selectedRange = [self.commentsTextView selectedRange];

            NSDictionary *currentAttributesDict = [self.commentsTextView.textStorage attributesAtIndex:selectedRange.location
                                                                            effectiveRange:nil];

            NSDictionary *dict;

            if ([currentAttributesDict objectForKey:NSUnderlineStyleAttributeName] == nil ||
                [[currentAttributesDict objectForKey:NSUnderlineStyleAttributeName] intValue] == 0) {

                dict = @{NSUnderlineStyleAttributeName: [NSNumber numberWithInt:1]};

            }
            else{
                dict = @{NSUnderlineStyleAttributeName: [NSNumber numberWithInt:0]};
            }

            [self.commentsTextView.textStorage beginEditing];
            [self.commentsTextView.textStorage setAttributes:dict range:selectedRange];
            [self.commentsTextView.textStorage endEditing];

person Ashutosh    schedule 01.04.2014    source источник


Ответы (1)


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

В вашей структуре if... else в дополнение к NSUnderlineStyleAttributeName задайте dict значения, которые вы хотите использовать для шрифта и размера шрифта.

Как вы раньше устанавливали шрифт и размер шрифта?

Из документа Apple в UITextView разделе Обзор:

В iOS 6 и более поздних версиях этот класс поддерживает несколько стилей текста за счет использования свойства attributeText. (Стилизованный текст не поддерживается в более ранних версиях iOS.) Установка значения для этого свойства приводит к тому, что текстовое представление использует информацию о стиле, указанную в атрибутированной строке. Вы по-прежнему можете использовать свойства font, textColor и textAlignment для установки атрибутов стиля, но эти свойства применяются ко всему тексту в текстовом представлении.

https://developer.apple.com/library/ios/documentation/uikit/reference/uitextview_class/Reference/UITextView.html

Когда вы устанавливаете атрибуты для определенного диапазона текста, он перезаписывает все стили, которые ранее существовали в этом диапазоне, используя только новые атрибуты.

person Gavin Hope    schedule 01.04.2014
comment
Понятно. Атрибуты должны были быть объединены. Спасибо - person Ashutosh; 02.04.2014