Текст UILabel в виде HTML-текста - PullRequest
3 голосов
/ 21 апреля 2011

У меня стек с небольшой проблемой.

Мне нужно использовать предложение, в котором первые два слова выделены жирным шрифтом, а последние два слова выделены курсивом.

как я использую O Bjective C Разработчик.

Как это сделать.Возможно ли это в Цели C?

С уважением,

Ответы [ 7 ]

9 голосов
/ 11 апреля 2014

Для iOS7 вы можете использовать это:

NSString * htmlString = @"<html><body> Some html string </body></html>";
NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];

UILabel * myLabel = [UILabel alloc] init];
myLabel.attributedText = attrStr;
3 голосов
/ 21 апреля 2011

Apple рекомендует для небольшого количества стилизованного текста использовать веб-представление и отображать текст, размеченный в HTML и отформатированный с помощью CSS и т. Д.

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

Существует структура Core Text, если вы хотите немного больше контролировать свой текст и хотите использовать приписанные строки.

Это не однострочник.Для использования основного текста требуется довольно много кода.

Я написал базовое текстовое представление, которое будет отображать URL-адреса с возможностью вставки, встроенные в текст, но я не предоставил ему поддержку произвольного форматирования.Если вы заинтересованы в отображении ссылок в тексте, проверьте это: https://github.com/jasarien/CoreTextHyperlinkView

Возможно, вас заинтересует расширенное представление текста Оливера Дробника, которое также основано на Core Text.Насколько я знаю, вы можете кормить его HTML, и он будет производить собственное представление, содержащее ваш форматированный текст.Очень полезно.Его можно найти здесь: https://github.com/Cocoanetics/DTCoreText

2 голосов
/ 19 ноября 2011

Я написал очень маленький класс с именем THMultiPartLabel , чтобы помочь мне в этом, - вы можете найти его на GitHub здесь . Это в значительной степени основано на ответе Джейсона на похожий вопрос здесь . Используя этот класс, вы бы реализовали свой пример так:

UIFont *normal = [UIFont systemFontOfSize:20];
UIFont *bold = [UIFont boldSystemFontOfSize:20];
UIFont *italic = [UIFont italicSystemFontOfSize:20];

NSArray *fonts = [NSArray arrayWithObjects: normal, bold, normal, italic, normal nil];
THMultiPartLabel *mpLabel = [[THMultiPartLabel alloc] initWithOffsetX:0 Y:0 defaultFonts:fonts];

[mpLabel updateText:@"I ", @"am using ", @"an ", @"Objective C ", "Developer", nil];
1 голос
/ 21 апреля 2011

Вы должны взглянуть на основной текст.

Вот несколько полезных ресурсов:

0 голосов
/ 06 апреля 2013

Начиная с iOS 6, вы можете использовать NSAttributedString с UILabel, NSAttributedString принимает NSString в качестве аргумента в одном из своих конструкторов, после чего вы можете указать, какие диапазоны этой строки имеют определенный стиль текста.

Хороший пример того, как это сделать на iOS 6, можно найти здесь: http://weblog.invasivecode.com/post/31931916393/introduction-to-nsattributedstring-for-ios-6

Если вам что-то обратно совместимо, я настоятельно рекомендую OHAttributedLabel, который можно найти здесь: https://github.com/AliSoftware/OHAttributedLabel

Примечание. OHAttributedLabel также позволяет использовать html-разметку для оформления текста надписи.

0 голосов
/ 21 апреля 2011

Вы не можете сделать и то, и другое со стандартной реализацией UILabel. Но вы можете сделать одно или другое.

myLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];
0 голосов
/ 21 апреля 2011

Лучшим вариантом, вероятно, является замена UILabel на UIWebView и использование HTML для форматирования.

[РЕДАКТИРОВАТЬ]

Если у вас их много и вы думаете, что их производительность сильно снижается, вы можете (начиная с iOS 3.2 и далее) также рассмотреть NSAttributedString хотя это будет намного больше кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...