将自定义字体应用于从HTML字符串转换的属性字符串

时间:2014-08-20 09:53:29

标签: html ios ios7 nsattributedstring

我使用了显示UITextView的{​​{1}}。我从服务器获得 HTML 字符串。我使用下面的代码将HTML转换为NSAttributedString。

NSAttributedString

要应用字体,我尝试了以下2个代码。

  1. 应用属性
  2. 自定义字符串
  3. 申请属性我使用下面的代码。

    NSMutableAttributedString *attrib = [[NSMutableAttributedString alloc]initWithData:[strHTML dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,  NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} documentAttributes:nil error:nil];
    

    对于自定义字符串,我首先在[attrib addAttribute:NSFontAttributeName value:myFont range:NSMakeRange(0, attrib.length)]; 下面创建,然后在NSString

    中隐藏
    NSAttributedString

    使用两个代码字体已成功更改。但粗体和斜体仅未应用下划线在NSAttributedString中应用。

    我在下面的链接中提到。

    1. iOS 7 using an HTML string as an NSAttributedString AND setting the font?
    2. ios7 font size change when create nsattributedstring from html
    3. How to add CSS of an html to NSAttributedString?
    4. 我应该从服务器端应用字体和标签,然后检索HTML字符串吗?

      任何帮助都会受到欢迎!!!

1 个答案:

答案 0 :(得分:15)

最后我得到了回答。您可以检查larmes answer(Find attributes from attributed string that user typed),或者您只需删除旧的字体属性并使用以下代码应用新字体。

 NSDictionary *dictAttrib = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,  NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)};
 NSMutableAttributedString *attrib = [[NSMutableAttributedString alloc]initWithData:[yourHTMLString dataUsingEncoding:NSUTF8StringEncoding] options:dictAttrib documentAttributes:nil error:nil];
 [attrib beginEditing];
        [attrib enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attrib.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
            if (value) {
                UIFont *oldFont = (UIFont *)value;
                NSLog(@"%@",oldFont.fontName);

                /*----- Remove old font attribute -----*/
                [attrib removeAttribute:NSFontAttributeName range:range];
                //replace your font with new.
                /*----- Add new font attribute -----*/
                if ([oldFont.fontName isEqualToString:@"TimesNewRomanPSMT"])
                    [attrib addAttribute:NSFontAttributeName value:font1 range:range];
                else if([oldFont.fontName isEqualToString:@"TimesNewRomanPS-BoldMT"])
                    [attrib addAttribute:NSFontAttributeName value:font2 range:range];
                else if([oldFont.fontName isEqualToString:@"TimesNewRomanPS-ItalicMT"])
                    [attrib addAttribute:NSFontAttributeName value:font3 range:range];
                else if([oldFont.fontName isEqualToString:@"TimesNewRomanPS-BoldItalicMT"])
                    [attrib addAttribute:NSFontAttributeName value:font4 range:range];
                else
                    [attrib addAttribute:NSFontAttributeName value:font5 range:range];
            }
        }];
[attrib endEditing];

感谢。也许它会帮助你。