Criação de um NSAttributedString a partir de HTML (ou RTF) no iOS 7

Após as adições à classe NSAttributedString do iOS 7, agora é possível criar strings atribuídas usando HTML.

Por exemplo:

// Create an NSURL pointing to the HTML file
NSURL
*htmlString = [[NSBundle mainBundle]
URLForResource: @"helloworld" withExtension:@"html"];

// Transform HTML into an attributed string
NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithFileURL:htmlString options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil];

// Instantiate UITextView object
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20,20,self.view.frame.size.width,self.view.frame.size.height)];

// Add attributed string to text view
textView
.attributedText=stringWithHTMLAttributes;

// Add the text view to the view hierarchy
[self.view addSubview:textView];

Duas coisas a serem observadas aqui: (1) este é um uso aproximado e pronto do UITextView – consulte esta postagem do blog anterior para uma implementação melhor (2) você precisará salvar um arquivo anexo chamado ‘helloworld.html’ para que isso funcione.

Aqui está o arquivo helloworld.html:

<html><p>Hello <i>World</i></p></html>

Assim como HTML, você pode usar arquivos RTF e RTFD para criar strings atribuídas, usando NSRTFTextDocumentType e NSRTFDTextDocumentType respectivamente no lugar de NSHTMLTextDocumentType.

Finalmente, você deve levar em consideração as seguintes notas da Apple: “Chamar [este método] a partir do thread principal funciona (mas ainda pode expirar se o HTML contiver referências a recursos externos, o que deve ser evitado a todo custo). O HTML O mecanismo de importação serve para implementar algo como markdown (isto é, estilos de texto, cores e assim por diante), não para importação geral de HTML. “

Este aviso da Apple não significa, entretanto, que você não pode usar CSS; na verdade, você pode transformar arquivos HTML com arquivos CSS vinculados em NSAttributedStrings, abrindo a porta para a substituição do uso de UIWebView em aplicativos de eBook pelo uso de UITextViews.