MarkupLabel 0.0.1

MarkupLabel 0.0.1

测试测试
语言语言 Obj-CObjective C
许可证 BSD 2.0
发布最新发布2014年12月

未认证维护。



  • 作者
  • Jonathan Wight

这仅是我CoreTextToy(https://github.com/schwa/CoreTextToy)项目的一部分,被提取出来并作为一个自己的GitHub仓库。

具体来说,这段代码允许您使用(简单的)HTML标记与UILabel。

必要的截图

Before After

许可证

此代码根据2条款BSD许可证(“简化版BSD许可证”或“FreeBSD许可证”)进行授权。以下为许可证内容

版权所有(C) 2011 Jonathan Wight。保留所有权利。

在满足以下条件的前提下,对本源代码和二进制代码的再分配和使用(包括但不限于修改)予以许可。

  1. 源代码的重新分配必须保留上述版权声明、本许可条款和以下免责声明。

  2. 二进制形式的重新分配必须 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。

设计

UILabel+MarkupExtensions

实现了“setMarkup:”方法。传递给它HTML。这正是这个库的目的。

CMarkupValueTransformer

能够将简单的标记(一小部分HTML的子集)转换为NSAttributedString的价值转换器。

UIFont+MarkupExtensions

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

此代码粗糙且有效——但需要在所有iOS字体名称上测试(尤其是那些奇怪的字体)。

常见问题解答

为什么会有这样的代码?为什么不直接使用UIWebView?

UIWebViews创建起来非常昂贵,当您只需要一个简单的UILabel类型类来显示静态样式文本时,这似乎有些过度。

为什么会有这样的代码?为什么不使用NSHTMLTextDocumentType?

TODO:在此处详细说明(https://twitter.com/mattyohe/status/444320277812748288

这个工具支持多少HTML功能?

它使用HTML的最小子集。实际上,不要将其视为纯HTML——视为创建 NSAttributedString 的便捷方法。

目前仅支持少量标签,但您可以非常容易地定义自己的标签。

CoreTextToy 提供的所有标签怎么办?

UILabel并不像CoreTextToy的标签代码那样可配置。因此,其中支持的标签不一定被此代码支持。如果您需要图片标签,请使用CoreTextToy或NSHTMLTextDocumentType。

那么我该如何将HTML放入UILabel中?

快速方法

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;