wake-up-neo.net

Wie kann ich HTML-Text von der API auf dem iPhone anzeigen?

Das beste Beispiel, um meine Situation zu erklären, ist die Verwendung eines Blogposts. Nehmen wir an, ich habe eine UITableView mit Titeln von Blogbeiträgen, die ich von einer API erhalten habe. Wenn ich auf eine Zeile klicke, möchte ich den ausführlichen Blogbeitrag anzeigen.

Dabei gibt die API mehrere Felder zurück, darunter den "Post Body" (HTML-Text). Meine Frage ist, was soll ich verwenden, um es als formatiertes HTML anzuzeigen. Soll ich dafür ein UIWebView verwenden? Ich bin mir nicht sicher, ob Sie eine UIWebView verwenden, wenn Sie eine Webseite buchstäblich anzeigen (z. B. mit einer URL oder etwas anderem initialisieren) oder ob Sie einen HTML-String übergeben können, der dann ordnungsgemäß formatiert wird.

Auf dieser Seite werden noch einige andere Felder angezeigt, z. B. Titel, Kategorie, Autor usw. Ich verwende nur UILabels, also keine Probleme. Aber ich weiß nicht, was ich mit dem HTML-Chunk anfangen soll. Ich mache das alles programmgesteuert, übrigens.

Wenn Sie nicht sagen können, bin ich relativ neu in der iOS-Entwicklung, nur etwa 2-3 Wochen, ohne obj-c-Hintergrund. Wenn also ein UIWebView der richtige Ansatz ist, würde ich mich auch über "gotcha!" Notizen, wenn es welche gibt.

45
rpheath

Wie David Liu sagte, ist UIWebview der Weg zu gehen. Ich würde empfehlen, die HTML-Zeichenfolge separat zu erstellen und dann an UIWebView zu übergeben. Außerdem würde ich den Hintergrund transparent machen, indem Sie [webView setBackgroundColor:[UIColor clearColor]] verwenden, damit Sie die Dinge einfacher aussehen lassen können.

Hier ist ein Codebeispiel:

- (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];

}

HINWEIS:

Die Verwendung eines 'NSMutableString' bietet den Vorteil, dass Sie Ihre Zeichenfolge während des gesamten Analysevorgangs weiter aufbauen und an die 'UIWebView' übergeben können, während ein 'NSString' nach dem Erstellen nicht mehr geändert werden kann.

54
Moshe
   self.textLbl.attributedText = [[NSAttributedString alloc] initWithData:    [@"html-string" dataUsingEncoding:NSUnicodeStringEncoding]
                                                                          options:@{     NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
                                                                                     } documentAttributes:nil error:nil];
9
Pedroinpeace
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];

Ich verwende diesen Code, um sogar die Schriftart für den Webview-Text festzulegen, und gebe mein ivar 'ParameterWhereYouStoreTextFromAPI' weiter, in dem ich den von api erhaltenen Text abspeichere.

7
neha

Im speziellen Fall von primitivem HTML (Textstile, p/br-Tags) können Sie auch UITextView mit einer undokumentierten Eigenschaft verwenden:

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

Obwohl es nicht dokumentiert ist, wird es in vielen Apps verwendet, die ich kenne, und hat bisher keine einzige Ablehnung bewirkt.

6
Ortwin Gentz

Sie können die UIWebView-Methode - loadHTMLString: baseURL: verwenden.

Referenzlink: hier

4
David Liu

Moshes Antwort ist großartig, aber wenn Sie transparente Webansicht wünschen, müssen Sie die Eigenschaft für undurchsichtig auf FALSE setzen.

Sie können Folgendes prüfen: So erstellen Sie ein transparentes UIWebVIew

2
kraag22

Sie können es anzeigen, indem Sie HTML/JS-Text wie (Ausrichten, Zentrieren, Br>) entfernen. Verwenden Sie diese Methoden, wenn Sie iOS7.0 oder höher als Ziel verwenden.

    NSString *htmlFile;

    htmlFile=[array valueForKey:@"results"];

    NSAttributedString *attr = [[NSAttributedString alloc] initWithData:[htmlFile dataUsingEncoding:NSUTF8StringEncoding]options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:@(NSUTF8StringEncoding)}documentAttributes:nil error:nil];
        NSLog(@"html: %@", htmlFile);
        NSLog(@"attr: %@", attr);
        NSLog(@"string: %@", [attr string]);
        NSString *finalString = [attr string];

        [webView loadHTMLString:[finalString description] baseURL:nil];
0
Anuj Kumar Rai

Mein Szenario: Ich habe eine Textansicht in einem View-Controller und muss Daten in der Textansicht anzeigen, die im HTML-Format vorliegt.

Swift 3:

func detectUrlInText() {

let attrStr = try! NSAttributedString(
            data: "<b><i>\(Ldesc)</i></b>".data(using: String.Encoding.unicode, allowLossyConversion: true)!,
            options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil)

 desc.attributedText = attrStr

 desc.font = UIFont(name: "CALIBRI", size: 14)

}
// Ldesc is the string which gives me the data to put in the textview. desc is my UITextView.
:)
0
Mili