Как показать HTML-текст из API на iPhone?
Лучшим примером для объяснения моей ситуации является использование сообщения в блоге. Скажем, у меня есть UITableView, загруженный заголовками сообщений в блоге, которые я получил от API. Когда я нажимаю на строку, я хочу показать подробное сообщение в блоге.
При этом API передает несколько полей, включая "тело сообщения" (это текст HTML). Мой вопрос: что я должен использовать, чтобы отображать его, чтобы он отображался как форматированный HTML? Должен ли я использовать UIWebView для этого? Я не уверен, если вы используете UIWebView, когда вы буквально просматриваете веб-страницу (например, инициализируете ее URL-адресом или чем-то), или если вы можете передать ему строку HTML, и она будет отформатировать ее правильно.
На этой странице будут отображаться несколько других полей, таких как название, категория, автор и т.д. Я просто использую UILabels для них, поэтому никаких проблем нет. Но я не знаю, что делать с куском HTML. Я делаю все это программно, кстати.
Если вы не можете сказать, я относительно новичок в разработке iOS, всего около 2-3 недель, с NO obj-c фоном. Поэтому, если UIWebView является правильным подходом, я также буду признателен за любые "полученные"! примечания, если они есть.
Ответы
Ответ 1
Как сказал Дэвид Лю, 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
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];
Я использую этот код, чтобы даже установить шрифт для текста webview и передать мой ivar 'ParameterWhereYouStoreTextFromAPI', где я храню текст, полученный из api.
Ответ 3
self.textLbl.attributedText = [[NSAttributedString alloc] initWithData: [@"html-string" dataUsingEncoding:NSUnicodeStringEncoding]
options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
} documentAttributes:nil error:nil];
Ответ 4
В специальном случае примитивного HTML (стили текста, теги p/br) вы также можете использовать UITextView
с недокументированным свойством:
-[UITextView setValue:@"<b>bold</b>" forKey:@"contentToHTMLString"]
Несмотря на то, что он недокументирован, он используется во многих приложениях, которые я знаю и до сих пор не вызвал ни одного отклонения.
Ответ 5
Вы можете использовать UIWebView - loadHTMLString: baseURL: метод.
Ссылка ссылки: здесь
Ответ 6
Ответ на Моше велик, но если вы хотите прозрачный веб-просмотр, вам нужно установить свойство opaque в FALSE.
Вы можете проверить: Как сделать прозрачный UIWebVIew
Ответ 7
Вы можете показать это, удалив текст HTML/JS, например (align, center, 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];
Ответ 8
Мой сценарий: у меня есть Textview в контроллере представления и должен показывать данные в textView, который находится в формате 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.
:)