SDK提供的文本控件
- UILabel(继承UIView):无法输入;
- UITextField(继承UIView):只能输入一行,不可以滚动,可以设置提醒文字;
- UITextView(继承UIScrollView):能输入多行,可以滚动,不可以设置提醒文字。
三个控件都支持attributedText,进而都可以直接原生显示html,具体代码如下:
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:[content dataUsingEncoding:NSUnicodeStringEncoding]
options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
documentAttributes:nil
error:nil];
特性:text和html风格统一
很多情况下,一个控件可能既要可以显示text,也要可以显示html,而它们的默认风格属性都一样。为了问题的简单化,这里只讨论UILabel。大家都知道UILabel的font和textColor属性只对text起作用,对attributedText不起作用,如果让后台或者前端区分text或者html,也是很蛋疼的一件事。
利用html的标签,在content外面封装一层默认属性。
浏览一下html常用标签,可发现span标签可以胜任该工作,具体代码如下:
+ (NSAttributedString *)attributedStringContent:(NSString *)content
{
content = [NSString stringWithFormat:@"<span style=\"color:#8d8b8b; font-size:15px\">%@</span>", content];
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:[content dataUsingEncoding:NSUnicodeStringEncoding]
options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
documentAttributes:nil
error:nil];
return attributedString;
}