Текст 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 для установки атрибутов стиля, но эти свойства применяются ко всему тексту в текстовом представлении.
Когда вы устанавливаете атрибуты для определенного диапазона текста, он перезаписывает любые стили, которые ранее существовали в этом диапазоне, используя только новые атрибуты.