NSString:去掉<b> </ b>并为该段制作一个带颜色的属性字符串?

hzx*_*zxu 7 objective-c nsstring nsattributedstring ios

如果我有一个字符串:

这是<b>简单</ b>字符串.

我需要摆脱<b>,(抱歉b和尖括号之间没有空格,由于某些原因预览没有显示),也让"简单"这个词变为粗体,我的想法是:

  1. 用空的空间替换尖括号和br
  2. 使'简单'段具有属性

问题是一旦标签被删除,我仍然需要知道单词的位置,我是否首先记住'简单'的位置,删除后,位置-4应该是'简单'的新位置?有没有更好的方法?甚至将html标签转换为属性?

谢谢

编辑:应该是b而不是br

Jor*_*n H 6

iOS 7中提供了API,这使得这非常简单.它会将NSString(可能的)HTML文本转换为NSAttributedString.

NSDictionary *options = @{ NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType };

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithData:[myHTMLString dataUsingEncoding:NSUTF8StringEncoding] options:options documentAttributes:nil error:nil];
Run Code Online (Sandbox Code Playgroud)

它甚至可以保留所有应用的内联CSS background-color!

请注意,如果HTML文本中未指定字体和字体大小,则默认为Times New Roman 12.您可以这种方式指定:<style>body { font-family:-apple-system; font-size:14px; }<style>.如果您没有通过CSS指定字体,您仍然可以覆盖字体,但是您需要手动处理粗体,斜体等,否则如果您为整个字符串设置字体,格式将会丢失.一种方法是enumerateAttribute: NSFontAttributeName在可变属性字符串中查找字体名称中的"粗体"等,如果找到它,则将其替换range为所需的字体,例如用户的首选字体和大小,但使用粗体等版本,并继续用range从枚举中获得的每个替换字体.