2010-11-09 38 views
43

Ví dụ tốt nhất để giải thích tình huống của tôi là sử dụng bài đăng trên blog. Hãy nói rằng tôi có một UITableView nạp với tiêu đề của bài viết blog mà tôi nhận được từ một API. Khi tôi nhấp vào một hàng, tôi muốn hiển thị bài đăng blog chi tiết.Làm cách nào để hiển thị văn bản HTML từ API trên iPhone?

Khi thực hiện điều đó, API sẽ trao lại một số trường, bao gồm "nội dung bài đăng" (là văn bản HTML). Câu hỏi của tôi là, tôi nên sử dụng những gì để hiển thị nó để nó hiển thị dưới dạng HTML được định dạng? Tôi có nên sử dụng UIWebView cho điều đó không? Tôi không chắc chắn nếu bạn sử dụng một UIWebView khi bạn đang theo nghĩa đen xem một trang web (như khởi tạo nó với một URL hoặc một cái gì đó) hoặc nếu bạn có thể tay nó một chuỗi HTML và nó sẽ định dạng nó đúng cách.

Có một số trường khác sẽ được hiển thị trên trang này, chẳng hạn như tiêu đề, danh mục, tác giả, v.v. Tôi chỉ sử dụng UILabels cho những trường đó, vì vậy không có vấn đề gì ở đó. Nhưng tôi không biết phải làm gì với đoạn HTML. Tôi đang làm tất cả điều này, btw.

Nếu bạn không thể biết, tôi tương đối mới đối với sự phát triển iOS, chỉ khoảng 2-3 tuần, với nền KHÔNG obj-c. Vì vậy, nếu một UIWebView là cách tiếp cận đúng, tôi cũng đánh giá cao bất kỳ "gotcha!" ghi chú, nếu có.

Trả lời

53

Như David Liu nói, UIWebview là con đường để đi. Tôi khuyên bạn nên xây dựng một vài chuỗi HTML riêng biệt và sau đó chuyển nó tới UIWebView. Ngoài ra, tôi sẽ làm cho nền trong suốt, sử dụng [webView setBackgroundColor:[UIColor clearColor]] để bạn có một thời gian dễ dàng hơn làm cho mọi thứ trông như họ cần.

Dưới đây là một mẫu mã:

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

} 

LƯU Ý:

Lợi ích việc sử dụng một 'NSMutableString' là bạn có thể tiếp tục xây dựng chuỗi của bạn thông qua toàn bộ hoạt động phân tích và sau đó vượt qua nó đối với 'UIWebView', trong khi 'NSString' không thể thay đổi khi nó được tạo.

+2

Cảm ơn, chính xác những gì tôi đang tìm kiếm. – rpheath

+0

Hình thức 'viewDidLoad' trông như thế nào? – Realinstomp

+0

Xem ra với việc sử dụng bộ nhớ UIWebView –

4

Bạn có thể sử dụng phương thức UIWebView's - loadHTMLString: baseURL:.

tham khảo 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]; 

Tôi đang sử dụng mã này để thậm chí thiết lập font cho văn bản webview và đi qua Ivar của tôi 'ParameterWhereYouStoreTextFromAPI' nơi tôi lưu trữ văn bản lấy từ api.

+0

Bạn thật tuyệt vời !! cứu tôi. thanks :) –

2

Câu trả lời của Moshe rất tuyệt, nhưng nếu bạn muốn xem web trong suốt, bạn cần đặt thuộc tính mờ thành FALSE.

Bạn có thể muốn kiểm tra: How to make a transparent UIWebVIew

6

Trong trường hợp đặc biệt của HTML nguyên thủy (phong cách văn bản, p Thẻ/br) bạn cũng có thể sử dụng UITextView với một tài sản không có giấy tờ:

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

Mặc dù nó không có giấy tờ, nó được sử dụng trong nhiều ứng dụng tôi biết và cho đến nay đã không gây ra một sự từ chối duy nhất.

+0

Về mặt kỹ thuật, setValue: forKey: KHÔNG có tài liệu. –

+2

Phím 'contentToHTMLString' không có giấy tờ. –

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

Bạn có thể hiển thị bằng cách xóa văn bản HTML/JS như (align, center, br>). Vui lòng sử dụng phương pháp này nếu bạn đang nhắm mục tiêu iOS7.0 trở lên.

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

Kịch bản của tôi: Tôi có Textview trong bộ điều khiển chế độ xem và phải hiển thị dữ liệu trong văn bản có định dạng 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. 
:) 
Các vấn đề liên quan