私の状況を説明する最良の例は、ブログ投稿を使用することです。 APIから取得したブログ投稿のタイトルを読み込んだUITableViewがあるとします。行をクリックすると、詳細なブログ投稿が表示されます。
その際、APIは「投稿本文」(HTMLテキスト)を含むいくつかのフィールドを返します。私の質問は、フォーマットされたHTMLとして表示されるように表示するには何を使用すればよいですか?そのためにUIWebViewを使用する必要がありますか? Webページを文字通り表示するときに(URLなどで初期化するなど)UIWebViewを使用するか、HTML文字列を渡せば適切にフォーマットされるかどうかはわかりません。
タイトル、カテゴリ、作成者など、このページに表示される他のフィールドがいくつかあります。これらにはUILabelsを使用しているだけなので、問題はありません。しかし、HTMLチャンクをどうするかわかりません。ところで、私はこのすべてをプログラムで行っています。
わからない場合、私はiOS開発には比較的慣れておらず、2〜3週間しか経っていません。obj-cのバックグラウンドはありません。したがって、UIWebViewが適切なアプローチである場合、「落とし穴」もありがたいです。メモがあれば。
David Liuが言ったように、 IWebview が道です。 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」は一度作成すると変更できないことです。
self.textLbl.attributedText = [[NSAttributedString alloc] initWithData: [@"html-string" dataUsingEncoding:NSUnicodeStringEncoding]
options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
} documentAttributes:nil error:nil];
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テキストのフォントを設定し、apiから取得したテキストを保存するivar 'ParameterWhereYouStoreTextFromAPI'を渡します。
プリミティブHTML(テキストスタイル、p/brタグ)の特殊なケースでは、ドキュメント化されていないプロパティでUITextView
を使用することもできます。
-[UITextView setValue:@"<b>bold</b>" forKey:@"contentToHTMLString"]
文書化されていませんが、私が知っている多くのアプリで使用されており、これまでのところ単一の拒否を引き起こしていません。
UIWebViewのloadHTMLString:baseURL:メソッドを使用できます。
参照リンク: here
Mosheの答えはすばらしいですが、透明なWebビューが必要な場合は、opaqueプロパティをFALSEに設定する必要があります。
あなたはチェックしたいかもしれません: 透明なUIWebVIewの作り方
(align、centre、br>)のようなHTML/JSテキストを削除することで表示できます。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];
私のシナリオ:View Controllerに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.
:)