46 votes

Comment afficher un texte HTML à partir d'une API sur l'iPhone ?

Le meilleur exemple pour expliquer ma situation est d'utiliser un article de blog. Disons que j'ai un UITableView chargé avec les titres des articles de blog que j'ai obtenus à partir d'une API. Lorsque je clique sur une ligne, je veux afficher l'article de blog détaillé.

Ce faisant, l'API renvoie plusieurs champs, dont le "post body" (qui est un texte HTML). Ma question est la suivante : que dois-je utiliser pour l'afficher de manière à ce qu'il apparaisse sous forme de texte HTML formaté ? Devrais-je utiliser une UIWebView pour cela ? Je ne sais pas si vous utilisez un UIWebView lorsque vous visualisez littéralement une page Web (comme l'initialiser avec une URL ou autre) ou si vous pouvez lui remettre une chaîne HTML et qu'il la formatera correctement.

Plusieurs autres champs seront affichés sur cette page, tels que le titre, la catégorie, l'auteur, etc. J'utilise simplement des UILabels pour ces champs, ce qui ne pose aucun problème. Mais je ne sais pas quoi faire avec le fragment HTML. Je fais tout cela par programme, en fait.

Si vous ne pouvez pas le dire, je suis relativement nouveau dans le développement iOS, depuis seulement 2 ou 3 semaines, et je n'ai AUCUNE expérience en obj-c. Donc, si une UIWebView est la bonne approche, j'apprécierais également toute note "gotcha !", s'il y en a.

54voto

Moshe Points 23825

Comme l'a dit David Liu, UIWebview est la voie à suivre. Je recommanderais à quelques-uns de construire la chaîne HTML séparément et de la passer ensuite à l'UIWebView. De plus, je rendrais l'arrière-plan transparent, en utilisant la fonction [webView setBackgroundColor:[UIColor clearColor]] afin que vous puissiez plus facilement donner aux choses l'aspect qu'elles devraient avoir.

Voici un exemple de code :

- (void) createWebViewWithHTML{
    //create the string
    NSMutableString *html = [NSMutableString stringWithString: @"<html><head><title></title></head><body style=\"background:transparent;\">"];

    //continue building the string
    [html appendString:@"body content here"];
    [html appendString:@"</body></html>"];

    //instantiate the web view
    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.frame];

    //make the background transparent
    [webView setBackgroundColor:[UIColor clearColor]];

    //pass the string to the webview
    [webView loadHTMLString:[html description] baseURL:nil];

    //add it to the subview
    [self.view addSubview:webView];

}

NOTE :

L'avantage d'utiliser une 'NSMutableString' est que vous pouvez continuer à construire votre chaîne tout au long d'une opération d'analyse syntaxique et la transmettre ensuite à l''UIWebView', alors qu'une 'NSString' ne peut pas être modifiée une fois qu'elle est créée.

9voto

Pedroinpeace Points 228
   self.textLbl.attributedText = [[NSAttributedString alloc] initWithData:    [@"html-string" dataUsingEncoding:NSUnicodeStringEncoding]
                                                                          options:@{     NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
                                                                                     } documentAttributes:nil error:nil];

7voto

neha Points 2033
NSString *strForWebView = [NSString stringWithFormat:@"<html> \n"
      "<head> \n"
      "<style type=\"text/css\"> \n"
      "body {font-family: \"%@\"; font-size: %@; height: auto; }\n"
      "</style> \n"
      "</head> \n"
      "<body>%@</body> \n"
      "</html>", @"helvetica", [NSNumber numberWithInt:12], ParameterWhereYouStoreTextFromAPI];

 [self.webview loadHTMLString:strForWebView baseURL:nil];

J'utilise ce code pour définir la police du texte de la vue web et je passe mon ivar 'ParameterWhereYouStoreTextFromAPI' où je stocke le texte obtenu de l'API.

6voto

Ortwin Gentz Points 15102

Dans le cas particulier du HTML primitif (styles de texte, balises p/br), vous pouvez également utiliser UITextView avec une propriété non documentée :

-[UITextView setValue:@"<b>bold</b>" forKey:@"contentToHTMLString"]

Même si elle n'est pas documentée, elle est utilisée dans de nombreuses applications que je connais et n'a jusqu'à présent pas provoqué un seul rejet.

4voto

David Liu Points 2930

Vous pouvez utiliser la méthode loadHTMLString:baseURL : de UIWebView.

Lien de référence : aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X