Каков правильный способ преобразования текста html в атрибутированный текст для UILabel внутри UITableViewCell?

Мне нужно преобразовать текст html в атрибутированную строку. Следующий код работает нормально, но я обновляю метку, которая находится в файле UITableViewCell. Таким образом, приведенный ниже код занимает много времени для преобразования в «атрибутированную строку».

NSAttributedString *attributedString = [[NSAttributedString alloc] 
initWithData:[[stPhoto photoDetails] dataUsingEncoding:NSUnicodeStringEncoding] 
options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil];

myLabel.attributedText = attributedString;

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

Любым другим путем?

Я пытался использовать DTCoreText lib, но процесс ее установки слишком сложен, и мне не следует использовать DTCoreText framework для такой небольшой задачи.

Любые другие способы?

Мой текст HTML может содержать следующее: полужирный + курсив + подчеркивание + маркеры + цвет текста

Пожалуйста, предложите мне что-нибудь!! Это было бы очень полезно.


person Hemang    schedule 20.11.2015    source источник


Ответы (1)


Я думаю, что есть два простых варианта для вас

  1. Используйте асинхронное преобразование из html в NSAttributedString. Не уверен, что вы имеете в виду, когда говорите, что это не помогает. Эта процедура быстрее, чем показ изображений, который работает достаточно хорошо при использовании асинхронной предварительной загрузки.
  2. Предварительно обработайте данные и сохраните photoDetails как NSAttributedString вместо обычного NSString с содержимым html.
person oroom    schedule 20.11.2015
comment
2 вариант звучит хорошо! :) Я подам заявку и дам вам знать здесь. - person Hemang; 21.11.2015
comment
Я считаю, что вы не должны использовать вариант № 1, потому что (очень сложный! Следовательно, медленный...) код NSAttributedString, который выполняет преобразование, не является потокобезопасным. Обычно это работает, но... - person GSnyder; 04.05.2018