首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iOS中将HTML转换为NSAttributedString

在iOS中将HTML转换为NSAttributedString
EN

Stack Overflow用户
提问于 2010-11-19 01:38:35
回答 10查看 116.3K关注 0票数 161

我正在使用UIWebView的一个实例来处理一些文本并正确地给它上色,它给出的结果是HTML,但是我不想在UIWebView中显示它,而是想使用带有NSAttributedStringCore Text来显示它。

我可以创建和绘制NSAttributedString,但我不确定如何将其转换和映射为属性字符串。

我知道在Mac下,NSAttributedString有一个initWithHTML:方法,但这是一个只在Mac上添加的方法,不适用于iOS。

我也知道有一个类似的问题,但它没有答案,我想我会再试一次,看看是否有人创造了一个方法来做到这一点,如果是,如果他们可以分享它。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-09-19 13:21:28

在iOS 7中,UIKit添加了一个initWithData:options:documentAttributes:error:方法,该方法可以使用HTML语言初始化NSAttributedString,例如:

代码语言:javascript
复制
[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                           NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} 
                      documentAttributes:nil error:nil];

在Swift中:

代码语言:javascript
复制
let htmlData = NSString(string: details).data(using: String.Encoding.unicode.rawValue)
let options = [NSAttributedString.DocumentReadingOptionKey.documentType:
        NSAttributedString.DocumentType.html]
let attributedString = try? NSMutableAttributedString(data: htmlData ?? Data(),
                                                          options: options,
                                                          documentAttributes: nil)
票数 303
EN

Stack Overflow用户

发布于 2011-01-11 07:03:42

Github上有一个Oliver Drobnik正在开发的open source addition to NSAttributedString。它使用NSScanner进行HTML解析。

票数 46
EN

Stack Overflow用户

发布于 2016-05-25 11:23:33

这是一个用Swift编写的String扩展,用于返回NSAttributedString形式的HTML字符串。

代码语言:javascript
复制
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
    }
}

要使用,

代码语言:javascript
复制
label.attributedText = "<b>Hello</b> \u{2022} babe".htmlAttributedString()

在上面的代码中,我特意添加了一个unicode \u2022,以显示它正确地呈现unicode。

小问题:NSAttributedString使用的默认编码是NSUTF16StringEncoding (而不是UTF8!)。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4217820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档