这仅是我CoreTextToy(https://github.com/schwa/CoreTextToy)项目的一部分,被提取出来并作为一个自己的GitHub仓库。
具体来说,这段代码允许您使用(简单的)HTML标记与UILabel。
必要的截图
此代码根据2条款BSD许可证(“简化版BSD许可证”或“FreeBSD许可证”)进行授权。以下为许可证内容
版权所有(C) 2011 Jonathan Wight。保留所有权利。
在满足以下条件的前提下,对本源代码和二进制代码的再分配和使用(包括但不限于修改)予以许可。
源代码的重新分配必须保留上述版权声明、本许可条款和以下免责声明。
二进制形式的重新分配必须 reproduced the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
本软件由Jonathan Wight提供,不保证任何质量或适用性,包括但不限于任何明示或暗示的对适销性或特定用途适用性的保证。在任何情况下,无论出于何种原因或 Theory of Liability,均不得将责任归咎于Jonathan Wight或其贡献者,无论是否因使用本软件而直接或间接、偶然地引起、具体或无形损失、损害或商业中断。
软件和文档中的观点和结论均为作者的个人观点,不应被视为代表Jonathan Wight的正式政策,无论是明示的还是暗示的。
主分支和开发分支需要iOS 6.0或更高版本,并启用ARC。
实现了“setMarkup:”方法。传递给它HTML。这正是这个库的目的。
能够将简单的标记(一小部分HTML的子集)转换为NSAttributedString的价值转换器。
对UIFont的扩展,用于获取CTFont以及获取粗体、斜体等的字体变体。扫描字体名称以确定特定字体的属性。
此代码粗糙且有效——但需要在所有iOS字体名称上测试(尤其是那些奇怪的字体)。
UIWebViews创建起来非常昂贵,当您只需要一个简单的UILabel类型类来显示静态样式文本时,这似乎有些过度。
TODO:在此处详细说明(https://twitter.com/mattyohe/status/444320277812748288)
它使用HTML的最小子集。实际上,不要将其视为纯HTML——视为创建 NSAttributedString 的便捷方法。
目前仅支持少量标签,但您可以非常容易地定义自己的标签。
UILabel并不像CoreTextToy的标签代码那样可配置。因此,其中支持的标签不一定被此代码支持。如果您需要图片标签,请使用CoreTextToy或NSHTMLTextDocumentType。
快速方法
NSString *theMarkup = @"<b>Hello world</b>";
NSError *theError = NULL;
NSString *theAttributedString = [NSAttributedString attributedStringWithMarkup:theMarkup error:&theError];
// Error checking goes here.
theLabel.attributedString = theAttributedString
更快的方法
NSString *theMarkup = @"<b>Hello world</b>";
[theLabel setMarkup:theMarkup];
对于长期方法,请参阅“如何添加自定义样式?”
如果您不喜欢内置的标准样式,可以替换它们或添加新的样式。该过程相当简单
// Here's the markup we want to put into our UILabel. Note the custom <username> tag
NSString *theMarkup = [NSString stringWithFormat:@"<username>%@</username> %@", theUsername, theBody];
NSError *theError = NULL;
// Create a transformer and set up the standard styling (that part is optional)
CMarkupTransformer *theTransformer = [[CMarkupTransformer alloc] init];
[theTransformer addStandardStyles];
// Create custom attributes for our new "username" tag
NSDictionary *theFormatDictionary = @{
NSForegroundColorAttributeName: [UIColor blueColor],
kMarkupFontNameMetaAttributeName: @"Helvetica",
};
[self addFormatDictionary:theFormatDictionary forTag:@"username"];
// Transform the markup into a NSAttributedString
NSAttributedString *theAttributedString = [theTransformer transformMarkup:inMarkup baseFont:self.font error:&theError];
// Give the attributed string to the CCoreTextLabel.
self.label.attributedString = theAttributedString;