2010-11-09 12 views
43

Najlepszym przykładem na wyjaśnienie mojej sytuacji jest użycie posta na blogu. Załóżmy, że mam UITableView załadowany z tytułami blogów, które dostałem z API. Kiedy klikam w wiersz, chcę wyświetlić szczegółowy wpis na blogu.Jak wyświetlić tekst HTML z API na iPhonie?

Podczas wykonywania tej czynności interfejs API przekazuje kilka pól, w tym "treść postu" (czyli tekst HTML). Moje pytanie brzmi, co powinienem użyć, aby wyświetlić go, aby wyświetlał się jako sformatowany HTML? Czy powinienem używać do tego UIWebView? Nie jestem pewien, czy korzystasz z interfejsu UIWebView, gdy przeglądasz stronę internetową w sposób dosłowny (na przykład inicjalizujesz ją za pomocą adresu URL lub czegoś podobnego), czy możesz przekazać ciąg znaków HTML i poprawnie go sformatować.

Istnieje kilka innych pól, które będą wyświetlane na tej stronie, takich jak tytuł, kategoria, autor, itp. Używam tylko UILabel dla nich, więc nie ma problemów. Ale nie wiem, co zrobić z porcją HTML. Robię to wszystko programowo, przy okazji.

Jeśli nie możesz powiedzieć, jestem stosunkowo nowy w rozwoju iOS, tylko około 2-3 tygodni, bez tła. Więc jeśli UIWebView jest właściwym podejściem, doceniłbym również "gotcha!" zauważa, jeśli są jakieś.

Odpowiedz

53

Jak powiedział David Liu, UIWebview jest droga. Polecam kilka budujących osobno ciąg znaków HTML, a następnie przekazywanie ich do interfejsu UIWebView. Ponadto sprawiłbym, że tło stało się przezroczyste, używając [webView setBackgroundColor:[UIColor clearColor]], aby łatwiej było wyglądać tak, jak powinno.

Oto przykładowy kod:

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

} 

UWAGA:

Korzyść z użyciem „NSMutableString” jest to, że można dalej budować swój ciąg poprzez całej operacji analizowania, a następnie przekazać go do "UIWebView", natomiast "NSString" nie może być zmieniony po utworzeniu.

+2

Dzięki, dokładnie to, czego szukałem. – rpheath

+0

Jak wyglądałby widok 'viewDidLoad'? – Realinstomp

+0

Uważaj przy użyciu pamięci UIWebView. –

4

Możesz użyć UIWebView's - loadHTMLString: baseURL: method.

LINK: here

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

Używam tego kodu do nawet ustawić czcionkę dla tekstu Webview i przechodzącej mój ivar „ParameterWhereYouStoreTextFromAPI” gdzie jestem przechowywania tekst uzyskany z API.

+0

Jesteś niesamowity !! uratował mnie. dzięki :) –

6

W szczególnym przypadku prymitywnego HTML (style tekstu, P Tagi/Br) można również wykorzystać UITextView z majątku nieudokumentowanych:

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

Nawet jest nieudokumentowane, jest używane w wielu aplikacjach, które znam i jak dotąd nie spowodowało pojedynczego odrzucenia.

+0

Technicznie, setValue: forKey: is NOT nieudokumentowane. –

+2

Klucz 'contentToHTMLString' jest nieudokumentowany. –

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

Można pokazać go usuwając tekst HTML/JS podobne (wyrównać, centrum, br>). Należy skorzystać z tej metody, jeśli są kierowane iOS7.0 i powyżej.

0

Mój scenariusz: Mam widok tekstowy w kontrolce widoku i muszę wyświetlić dane w textView, który jest w formacie HTML.

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. 
:)