2011-03-14 16 views
19

Como dice el título, ahora puedo convertir HTML en NSAttributedString con initWithHTML:documentAttributes:, pero lo que quiero hacer aquí es invertir. ¿Hay alguna biblioteca de terceros para lograr esto?¿Cómo convierto NSAttributedString en cadena HTML?

@implementation NSAttributedString(HTML) 
-(NSString *)htmlForAttributedString{ 
    NSArray * exclude = [NSArray arrayWithObjects:@"doctype", 
         @"html", 
         @"head", 
         @"body", 
         @"xml", 
         nil 
         ]; 
    NSDictionary * htmlAtt = [NSDictionary 
           dictionaryWithObjectsAndKeys:NSHTMLTextDocumentType, 
           NSDocumentTypeDocumentAttribute, 
           exclude, 
           NSExcludedElementsDocumentAttribute, 
           nil 
           ]; 
    NSError * error; 
    NSData * htmlData = [self dataFromRange:NSMakeRange(0, [self length]) 
           documentAttributes:htmlAtt error:&error 
         ]; 
     //NSAttributedString * htmlString = [[NSAttributedString alloc]initWithHTML:htmlData documentAttributes:&htmlAtt]; 
    NSString * htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding]; 
    return htmlString; 
} 
@end 
+1

El título se pregunta cómo convertir HTML en NSAttributeString, mientras que la pregunta no viceversa. – Eimantas

+0

¿Cuál es exactamente el problema con el código que ha publicado? Deberia de funcionar. – omz

Respuesta

39

Uso dataFromRange:documentAttributes: con el atributo de tipo de documento (NSDocumentTypeDocumentAttribute) ajustado en HTML (NSHTMLTextDocumentType):

NSAttributedString *s = ...; 
NSDictionary *documentAttributes = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};  
NSData *htmlData = [s dataFromRange:NSMakeRange(0, s.length) documentAttributes:documentAttributes error:NULL]; 
NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding]; 
+0

en iOS8 (y posiblemente iOS7), se bloqueará si no se llama al hilo principal !!!! –

+0

Si el texto contiene un enlace, entonces no creará un href para el enlace. – ingaham

+7

Solo necesito las etiquetas negrita, cursiva, subrayado y StrikeThrough en mi HTML, pero la conversión de NSAttributedString a HTML produce mucho css para lograr esto. ¿Alguna alternativa para mantener esto simple? – ilight

Cuestiones relacionadas