45

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 にテキストを表示する必要があります。

助けてください

4

11 に答える 11

103

属性付きテキストを使用することで、サードパーティのライブラリなしで実行できます。取得しているような 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>"];
于 2014-01-25T20:45:43.277 に答える
17

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()
于 2016-09-08T21:46:56.847 に答える
15

RTLabel ライブラリを使用して HTML テキストを変換します。私はそれを数回使用しました。できます。ライブラリとサンプル コードへのリンクを次に示します。

https://github.com/honcheng/RTLabel .

私が助けてくれることを願っています。

于 2013-04-08T08:21:58.980 に答える
3

から: https://stackoverflow.com/a/5581178/237838


HTML をプレーン テキストに変換するにはファイルのダウンロード

と使用

stringByConvertingHTMLToPlainTextあなたの機能NSString


また

DTCoreText (以前は HTML の NSAttributedString Additions と呼ばれていました)を使用できます。

于 2013-04-08T06:23:38.240 に答える
2

これが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")
    }
于 2016-07-25T21:30:05.563 に答える
0

最近、私は部分的な 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)
于 2016-10-10T10:28:21.380 に答える