Web サービスから HTML 応答を取得しています 以下は、応答として取得している HTML です。
<p><strong>Topic</strong>Gud mrng.</p>
\n<p><strong>Hello Everybody</strong>: How are you.</p>
\n<p><strong>I am fine</strong>: 1 what about you.</p>
UILabel にテキストを表示する必要があります。
助けてください
属性付きテキストを使用することで、サードパーティのライブラリなしで実行できます。取得しているような HTML フラグメントを受け入れると思いますが、CSS を指定できるように、完全な HTML ドキュメントでラップすることをお勧めします。
static NSString *html =
@"<html>"
" <head>"
" <style type='text/css'>"
" body { font: 16pt 'Gill Sans'; color: #1a004b; }"
" i { color: #822; }"
" </style>"
" </head>"
" <body>Here is some <i>formatting!</i></body>"
"</html>";
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 200)];
NSError *err = nil;
label.attributedText =
[[NSAttributedString alloc]
initWithData: [html dataUsingEncoding:NSUTF8StringEncoding]
options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
documentAttributes: nil
error: &err];
if(err)
NSLog(@"Unable to parse label text: %@", err);
簡潔ではありませんが、UILabel にカテゴリを追加することで混乱を解消できます。
@implementation UILabel (Html)
- (void) setHtml: (NSString*) html
{
NSError *err = nil;
self.attributedText =
[[NSAttributedString alloc]
initWithData: [html dataUsingEncoding:NSUTF8StringEncoding]
options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
documentAttributes: nil
error: &err];
if(err)
NSLog(@"Unable to parse label text: %@", err);
}
@end
…</p>
[someLabel setHtml:@"Be <b>bold!</b>"];
Swift 4: バージョン
extension String {
func htmlAttributedString() -> NSAttributedString? {
guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
guard let html = try? NSMutableAttributedString(
data: data,
options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html],
documentAttributes: nil) else { return nil }
return html
}
}
スウィフト 3: バージョン
extension String {
func htmlAttributedString() -> NSAttributedString? {
guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }
guard let html = try? NSMutableAttributedString(
data: data,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil) else { return nil }
return html
}
}
Swift 2: バージョン
extension String {
func htmlAttributedString() -> NSAttributedString? {
guard let data = self.dataUsingEncoding(NSUTF16StringEncoding, allowLossyConversion: false) else { return nil }
guard let html = try? NSMutableAttributedString(
data: data,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil) else { return nil }
return html
}
}
次のように使用します。
label.attributedText = yourStringVar.htmlAttributedString()
RTLabel ライブラリを使用して HTML テキストを変換します。私はそれを数回使用しました。できます。ライブラリとサンプル コードへのリンクを次に示します。
https://github.com/honcheng/RTLabel .
私が助けてくれることを願っています。
から: https://stackoverflow.com/a/5581178/237838
HTML をプレーン テキストに変換するにはファイルのダウンロード
と使用
stringByConvertingHTMLToPlainText
あなたの機能NSString
また
DTCoreText (以前は HTML の NSAttributedString Additions と呼ばれていました)を使用できます。
これがSwift 2バージョンです:
let htmlStringData = NSString(string: "<strong>Your HTML String here</strong>").dataUsingEncoding(NSUTF8StringEncoding)
guard let html = htmlStringData else { return }
do {
let htmlAttrString = try NSAttributedString(data: html, options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)
yourLabel.attributedText = htmlAttrString
} catch {
print("An error occured")
}
最近、私は部分的な HTML スニペットを扱い、それらを属性を追加できる属性付き文字列に変換しています。これが私の拡張機能のバージョンです
import Foundation
import UIKit
extension String {
func htmlAttributedString(attributes: [String : Any]? = .none) -> NSAttributedString? {
guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return .none }
guard let html = try? NSMutableAttributedString(
data: data,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: .none) else { return .none }
html.setAttributes(attributes, range: NSRange(0..<html.length))
return html
}
}
私はそれを次のように呼びます:
let attributes = [
NSForegroundColorAttributeName: UIColor.lightGray,
NSFontAttributeName : UIFont.systemFont(ofSize: 12).traits(traits: .traitItalic)
]
label?.attributedText = partialHTMLString.htmlAttributedString(attributes: attributes)