Текст 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];

1 ответ

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам