如何将HTML的CSS添加到NSAttributedString?

时间:2014-02-28 09:05:59

标签: ios7 uitextview nsattributedstring

我正在尝试通过NSAttributedString加载HTML文件,以便在UITextView中显示。

那么,我如何将CSS应用于文本视图的内容?

2 个答案:

答案 0 :(得分:29)

从iOS 7开始,您可以使用NSAttributedString HTML语法:

NSURL *htmlString = [[NSBundle mainBundle]  URLForResource: @"string"     withExtension:@"html"];
NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithFileURL:htmlString
                                                                                       options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
                                                                            documentAttributes:nil
                                                                                         error:nil];
textView.attributedText = stringWithHTMLAttributes; // attributedText field!

您必须将string.html添加到项目中,并且html的内容可以是这样的:

<html>
  <head>
    <style type="text/css">
      body {
        font-size: 15px;
        font-family: Avenir, Arial, sans-serif;
        color: red;
      }
    </style>
  </head>
  <body>
    <p>This is the text</p>
  </body>
</html> 

根据我的测试结果,您可以更改:color,font-family,font-weight,font-size,text-align,并使用<b><strong><i><u><sup><sub>代码。

答案 1 :(得分:0)

如果您将文件存储在Assets文件夹中,则无需在多个文件中重复CSS,则一个选择是在body标签之前包含一个包含所有样式信息的html文件。然后,您可以从我自己的代码中附加字节,如本示例所示:

func loadHTMLData(section:String, page:Int) -> NSAttributedString? {
    var data = Data()
    if let asset = NSDataAsset(name: "htmlhead") {
        data.append(asset.data)
    }

    if let asset = NSDataAsset(name: "\(section)\(page)") {
        data.append(asset.data)
        do {
            let attr = try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
            return attr
        }
        catch {
            // do something with error
            return nil
        }
    }
    else {
        return nil
    }
}

如果您愿意,也没有什么可以阻止您进一步拆分文件。