CoreTextToy 1.0.2

CoreTextToy 1.0.2

测试已测试
Lang语言 Obj-CObjective C
许可协议 BSD 2.0
发布上次发布2014年12月

匿名维护。



  • 作者:
  • Jonathan Wight

此代码库实现了CCoreTextLabel,这是一个类似于UILabel的类,支持富文本和简单HTML。

许可协议

此代码依据2条款BSD许可协议(“简化版BSD许可证”或“自由BSD许可证”)许可。许可协议内容如下

版权所有 2011 Jonathan Wight。保留所有权利。

如果满足以下条件,则允许以源代码和二进制形式重新分发和使用,无论是否修改:

  1. 源代码重新分发必须保留上述版权声明、本条件列表和下述免责声明。

  2. 二进制形式重新分发必须在生产文档和其他材料中复制上述版权声明、本条件列表和下述免责声明。

本软件由JONATHAN WIGHT“按现状”提供,不对其适用性或任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证,责任免除。在任何情况下,JONATHAN WIGHT或贡献者不对任何直接、间接、偶然、特殊、示范性或后续性损害(包括但不限于替代产品或服务的采购;使用、数据或利润损失;或业务中断)承担责任,即使已经被告知该损害的可能性和无论损害理论依据如何(合同、严格责任或侵权(包括疏忽或不计后果))。

软件和文档中的观点和结论均为作者的,不应视为代表Jonathan Wight的官方政策,无论明示还是暗示。

要求

master和develop分支需要iOS 6.0及以上版本和ARC。

注意:iOS 5.x在“feature/iOS5”分支中得到支持。

设计

CCoreTextLabel

一个类似于UILabel的类,使用CoreText渲染NSAttributedString对象。它支持Labels的大多数功能(包括阴影)。

此类可能是您使用此代码库的主要原因。

CCoreTextLabel_HTMLExtensions

在CCoreTextLabel上的一个非常简单的分类,公开了一个“markup”属性。此属性是一个简单的NSString,可以包含HTML风格标记。这是一个“只写”属性(获取器总是返回NULL)。

CCoreTextRenderer

一个渲染类,它接受NSAttributedStrings和一些其他参数,并将它们渲染到当前的CGContext。此类缓存了渲染特定字符串所需的所有相关信息。如果字符串或大小发生变化,应丢弃渲染对象并重新生成。

CMarkupValueTransformer

一个值转换器,能够将简单的HTML转换为NSAttributedString。

UIFont_CoreTextExtensions

对UIFont的扩展,用于获取CTFont以及获取粗体、斜体等字体变化。扫描字体名称以确定特定字体的属性。

此代码简单有效,但需要在所有 iOS字体名称(尤其是那些奇怪的字体)上进行测试。

常见问题解答(FAQ)

为什么会有这个东西?为什么不用UIWebView呢?

UIWebView的创建成本很高,当你只需要一个简单的UILabel类型类来显示静态样式文本时,这几乎是一种过度杀鸡式的方法。

为什么会有这个东西?为什么不用 https://github.com/Cocoanetics/NSAttributedString-Additions-for-HTML 呢?

CCoreTextLabel的设计仅用于在屏幕上显示静态文本,类似于UILabel。"NSAttributedString-Additions-for-HTML"似乎做了很多我不需要的事情。

这个玩意儿支持多少HTML?

它使用HTML的最小子集。实际上,不要把它当作纯HTML来考虑,它仅仅是一种创建NSAttributedString的便捷方法。

目前只支持少数几个标签,但你可以很容易地定义自己的标签。

链接和图片标签现在支持。

以下标签是支持的。可能还会支持更多标签,详细信息请查看源代码。

  • <br>
  • <b>
  • <a>
  • <i>
  • <mark>
  • <strike>
  • <img>

那么,我该如何将HTML放入CCoreTextLabel中呢?

快速方法

NSString *theMarkup = @"<b>Hello world</b>";
NSError *theError = NULL;
NSString *theAttributedString = [NSAttributedString attributedStringWithMarkup:theMarkup error:&theError];
// Error checking goes here.
theCoreTextLabel.markup = theMarkup;

更快捷的方法(如果您要使用CCoreTextLabel_HTMLExtensions类别)

NSString *theMarkup = @"<b>Hello world</b>";
theCoreTextLabel.markup = theMarkup;

对于较慢的方法,请参见“如何添加自定义样式?”

我该如何添加自定义样式?

// Here's the markup we want to put into our. Note the custom <username> tag
NSString *theMarkup = [NSString stringWithFormat:@"<username>%@</username> %@", theUsername, theBody];

NSError *theError = NULL;

// Create a transformer and give it a default font.
CMarkupValueTransformer *theTransformer = [[CMarkupValueTransformer alloc] init];
theTransformer.standardFont = [UIFont systemFontOfSize:13];

// Create custom attributes for our new "username" tag
NSDictionary *theAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
    (__bridge id)[UIColor blueColor].CGColor, (__bridge NSString *)kCTForegroundColorAttributeName,
    (__bridge id)[theTransformer.standardFont boldFont].CTFont, (__bridge NSString *)kCTFontAttributeName,
    NULL];
[theTransformer addStyleHandlerWithAttributes:theAttributes forTagSet:[NSSet setWithObject:@"username"]];

// Transform the markup into a NSAttributedString
NSAttributedString *theAttributedString = [theTransformer transformedValue:theMarkup error:&theError];

// Give the attributed string to the CCoreTextLabel.
self.label.text = theAttributedString;