Сегодня я поведаю о том, как можно отобразить HTML-текст в UILabel, а не в UIWebView, как мы привыкли делать это раньше.
Еще в iOS SDK 6.0 в UILabel добавили attributedText, где можно было применять разные стили для строки.
Но как быть, если нам нужно отобразить HTML-содержимое в нашем UILabel?
Здесь на помощь нам приходит, добавленный в класс NSAttributedString в iOS SDK 7.0, метод:
- (instancetype)initWithData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error
С его помощью можно создать объект NSAttributedString, стилизованный под HTML.
Как это сделать?
//кодируем HTML-строку в дату с необходимой кодировкой. Для корректного отображения кириллицы рекомендую использовать NSUnicodeStringEncoding NSData *data = [html dataUsingEncoding:NSUnicodeStringEncoding]; //создаем словарь необходимых опций NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}; //создаем объект NSAttributedString NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:data options:options documentAttributes: nil error: nil]; //применяем стилизованную строку к лейблу label.attributedText = attributedString;
Для простоты использования я создал категорию для UILabel, которая доступна на GitHub с примерном.