Convertir HTML a NSAttributedString en iOS

Resuelto Joshua asked hace 14 años • 18 respuestas

Estoy usando una instancia de UIWebViewpara procesar un texto y colorearlo correctamente, da el resultado como HTML pero en lugar de mostrarlo en el, UIWebViewquiero mostrarlo usando Core Textun archivo NSAttributedString.

Puedo crear y dibujar, NSAttributedStringpero no estoy seguro de cómo puedo convertir y asignar el HTML a la cadena atribuida.

Entiendo que en Mac OS X NSAttributedStringhay un initWithHTML:método, pero esto fue una adición exclusiva de Mac y no está disponible para iOS.

También sé que hay una pregunta similar a esta pero no tenía respuestas, pensé en intentarlo nuevamente y ver si alguien ha creado una manera de hacer esto y, de ser así, si podrían compartirla.

Joshua avatar Nov 19 '10 00:11 Joshua
Aceptado

En iOS 7, UIKit agregó un initWithData:options:documentAttributes:error:método que puede inicializar un NSAttributedStringHTML, por ejemplo:

[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                           NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} 
                      documentAttributes:nil error:nil];

En rápido:

let htmlData = NSString(string: details).data(using: String.Encoding.unicode.rawValue)
let options = [NSAttributedString.DocumentReadingOptionKey.documentType:
        NSAttributedString.DocumentType.html]
let attributedString = try? NSMutableAttributedString(data: htmlData ?? Data(),
                                                          options: options,
                                                          documentAttributes: nil)
pix avatar Sep 19 '2013 05:09 pix

Hay una adición de código abierto en proceso a NSAttributedString realizada por Oliver Drobnik en Github. Utiliza NSScanner para el análisis de HTML.

Ingve avatar Jan 10 '2011 23:01 Ingve