it-swarm.com.de

HTML-Text in UILabel iphone anzeigen

Ich erhalte eine HTML-Antwort von einem Webservice Unten ist der HTML-Code, den ich als Antwort bekomme

<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>

Ich muss den Text in UILabel anzeigen.

Bitte helfen

38
Khushboo

Verwenden Sie die RTLabel-Bibliothek, um den HTML-Text zu konvertieren. Ich habe es mehrmals benutzt. Es klappt. Hier ist ein Link zur Bibliothek und ein Beispielcode.

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

Hoffe ich habe geholfen.

15
Swati

Sie können dies auch ohne Bibliotheken von Drittanbietern tun, indem Sie attributierten Text verwenden. Ich glaube, es akzeptiert HTML-Fragmente wie die, die Sie bekommen, aber Sie möchten es vielleicht in ein vollständiges HTML-Dokument einbetten, um CSS anzugeben:

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);

Nicht prägnant, aber Sie können das Chaos aufheben, indem Sie UILabel eine Kategorie hinzufügen:

@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

[someLabel setHtml:@"Be <b>bold!</b>"];
92
Paul Cantrell

Swift 4: Version

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
    }
}

Swift 3: Version

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: Version

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
        }
}

benutze es als:

label.attributedText = yourStringVar.htmlAttributedString()
9
Oliver White

Schnell 4

Ich würde eher vorschlagen, NSAttributedString mit der ausfallsicheren Bequemlichkeit init zu erweitern. String ist nicht dafür verantwortlich, NSAttributedString von Natur aus zu erstellen. 

extension NSAttributedString {
     convenience init?(html: String) {
        guard let data = html.data(using: String.Encoding.unicode, allowLossyConversion: false) else {
            return nil
        }
        guard let attributedString = try? NSAttributedString(data: data, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) else {
            return nil
        }
        self.init(attributedString: attributedString)
    }
}
label.attributedText = NSAttributedString(html: "<span> Some <b>bold</b> and <a href='#/userProfile/uname'> Hyperlink </a> and so on </span>")
3
Paul

Von: https://stackoverflow.com/a/5581178/237838


So konvertieren Sie HTML in einfachen Text Download File

und verwenden

stringByConvertingHTMLToPlainText Funktion auf Ihrer NSString


OR

Sie können DTCoreText verwenden (zuvor als NSAttributedString Additions for HTML bekannt).

3
Chirag Pipaliya

Hier ist die Swift 2 Version:

    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")
    }
2
Beninho85

Die obige Antwort in Swift 3:

    var str = "<html> ... some html ... </html>"

    let htmlStringData = NSString(string: str).data(using: String.Encoding.utf8.rawValue)
    let html = htmlStringData

    do {
        let htmlAttrString = try? NSAttributedString(
                data: html!,
                options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
                documentAttributes: nil
        )
        agreementText.attributedText = htmlAttrString
    } catch {
        print("An error occured")
    }
1
NSnik

Die obige Antwort in Swift 3:

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 4 compatible | with setting of colour and font options:**

// add following extension to String:

        func htmlAttributed(family: String?, size: CGFloat, color: UIColor) -> NSAttributedString? {

                let sizeInPx = (size * 0.75)

                do {
                  let htmlCSSString = "<style>" +
                    "html *" +
                    "{" +
                    "font-size: \(sizeInPx)pt !important;" +
                    "color: \(color.hexString ?? "#000000") !important;" +
                    "font-family: \(family ?? "SFUIText-Regular"), SFUIText !important;" +
                  "}</style> \(self)"

                  guard let data = htmlCSSString.data(using: String.Encoding.utf8) else {
                    return nil
                  }

                  return try NSAttributedString(data: data,
                                                options: [.documentType: NSAttributedString.DocumentType.html,
                                                          .characterEncoding: String.Encoding.utf8.rawValue],
                                                documentAttributes: nil)
                } catch {
                  print("error: ", error)
                  return nil
                }
              }

        // add following extension to UIColor:

        extension UIColor{

          var hexString:String? {
            if let components = self.cgColor.components {
              let r = components[0]
              let g = components[1]
              let b = components[2]
              return  String(format: "%02X%02X%02X", (Int)(r * 255), (Int)(g * 255), (Int)(b * 255))
            }
            return nil
          }
        }

    // Sample Use:

    yourLabel.attributedText = locationTitle.htmlAttributed(family: yourLabel.font.fontName,
                                                                           size: yourLabel.font.pointSize,
                                                                           color: yourLabel.textColor)
0

In letzter Zeit habe ich mich mit partiellen HTML-Ausschnitten befasst und sie mit der Fähigkeit, Attribute hinzuzufügen, in Attribute-Strings konvertieren. Hier ist meine Version der Erweiterung

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
  }
}

Ich nenne es so:

let attributes = [
  NSForegroundColorAttributeName: UIColor.lightGray,
  NSFontAttributeName : UIFont.systemFont(ofSize: 12).traits(traits: .traitItalic)
]

label?.attributedText = partialHTMLString.htmlAttributedString(attributes: attributes)
0
Damo