2010-11-09 62 views
43

解釋我的情況的最好例子是使用博客文章。比方說,我有一個UITableView加載了我從API獲取的博客文章的標題。當我點擊一行時,我想顯示詳細的博客文章。如何在iPhone上顯示來自API的HTML文本?

當這樣做的時候,API傳遞了幾個字段,包括「post body」(這是HTML文本)。我的問題是,我應該使用什麼來顯示它,使其顯示爲格式化的HTML?我應該使用一個UIWebView嗎?我不確定當你真的在查看網頁時是否使用了UIWebView(比如用URL或其他東西初始化它),或者如果你可以把它交給一個HTML字符串,它會正確地格式化它。

這個頁面上還會顯示其他幾個字段,例如標題,類別,作者等。我只是使用UILabels,所以沒有問題。但我不知道該如何處理HTML塊。我以編程方式完成所有這些,順便說一句。

如果你不能說,我對iOS開發比較陌生,只有大約2-3周的時間,沒有obj-c背景。所以,如果一個UIWebView是正確的方法,我也很感激任何「陷阱!」筆記,如果有的話。

回答

53

正如大衛·劉說,UIWebview是要走的路。我會推薦幾個單獨構建HTML字符串,然後將其傳遞給UIWebView。另外,我會使背景變得透明,使用[webView setBackgroundColor:[UIColor clearColor]],這樣你就可以更容易地讓事物看起來像他們應該的樣子。

下面是一個代碼示例:

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

} 

注:

到使用「的NSMutableString」的好處是,你可以繼續通過一個完整的分析操作,以建立自己的字符串,然後把它傳遞到'UIWebView',而'NSString'一旦創建就無法更改。

+2

謝謝,正是我一直在尋找。 – rpheath 2010-11-11 05:48:09

+0

'viewDidLoad'看起來會是什麼樣子? – Realinstomp 2013-05-29 20:19:49

+0

小心使用UIWebView的內存使用 – 2014-04-17 22:05:22

4

您可以使用UIWebView的 - loadHTMLString:baseURL:方法。

參考鏈接: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]; 

我使用這個代碼,甚至設置web視圖文本的字體和通過我的伊娃「ParameterWhereYouStoreTextFromAPI」在那裏我存儲從API獲得的文本。

+0

你真棒!救了我。謝謝:) – 2015-07-10 15:31:26

6

在原始的HTML(文本樣式,P/BR標籤),你也可以使用UITextView與無證屬性的特殊情況:

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

即使它沒有記錄,它用在我所知道的很多應用程序中,迄今爲止還沒有引起任何拒絕。

+0

從技術上講,setValue:forKey:不是無證的。 – 2014-04-17 22:12:19

+2

'contentToHTMLString'鍵沒有記錄。 – 2014-04-20 16:42:45

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

您可以通過刪除HTML/JS文字像(對齊,居中,BR>),如有您的目標iOS7.0及以上版本使用此方法表現出來。

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

我的場景:我在視圖控制器中有一個Textview,並且必須在HTML格式的textView中顯示數據。

斯威夫特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. 
:) 
相關問題