Convertir HTML a NSAttributedString en iOS
Estoy usando una instancia de UIWebView
para procesar un texto y colorearlo correctamente, da el resultado como HTML pero en lugar de mostrarlo en el, UIWebView
quiero mostrarlo usando Core Text
un archivo NSAttributedString
.
Puedo crear y dibujar, NSAttributedString
pero no estoy seguro de cómo puedo convertir y asignar el HTML a la cadena atribuida.
Entiendo que en Mac OS X NSAttributedString
hay 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.
En iOS 7, UIKit agregó un initWithData:options:documentAttributes:error:
método que puede inicializar un NSAttributedString
HTML, 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)
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.