使用NSAttributedString覆盖HTML属性

时间:2015-02-17 17:24:09

标签: ios nsattributedstring

在iOS 7中,我们获得了将HTML字符串转换为NSAttributedString的功能,如下所示:

NSString *html = @"<bold>Wow!</bold> Now <em>iOS</em> can create <h3>NSAttributedString</h3> from HTMLs!";
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};

NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUTF8StringEncoding] options:options documentAttributes:nil error:nil];

我们还能够使用NSDefaultAttributesDocumentAttribute选项为未指定某些属性的HTML提供默认值。

我的问题是:有没有办法让NSAttributedString忽略它在HTML中看到的某些属性(例如颜色),而是使用我提供的属性?换句话说,我想提供覆盖属性值,而不是默认值。

1 个答案:

答案 0 :(得分:1)

您可以尝试枚举字符串。例如,尝试更改链接颜色。

NSMutableAttributedString *mttrString = [attrString mutableCopy];
[mutableString beginEditing];
[mutableString enumerateAttribute:NSLinkAttributeName
            inRange:NSMakeRange(0, res.length)
            options:0
         usingBlock:^(id value, NSRange range, BOOL *stop) {
             if (value) {
                 UIFont *oldFont = (UIFont *)value;
                 UIFont *newFont = [UIFont systemFontOfSize:12.f];
                 [res addAttribute:NSFontAttributeName value:newFont range:range];
             }
         }];
[res endEditing];
attrString = mAttrString;

我还没试过这个,但你应该能够以这种方式操纵字符串。