NimbusKit-AttributedLabel 1.0.0

NimbusKit-AttributedLabel 1.0.0

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

未设置用户 维护。




一个包含数据检测器、链接、内联图像和直接可用的 Core Text 属性的 UILabel 替代品。

iOS 6 通过 attributedText 引入了对富文本的支持,但它仍缺少 Nim ubusKit 提供的几个重要功能

  • 链接,包括显式链接和数据检测产生的隐式链接。
  • 内联图像。
  • 当文本更改时,采用任何现有的 UILabel 样式。
  • 修改标签子串的便利方法。

如果你不需要这些功能,应该考虑简单地使用 UILabel。

将其添加到您的应用程序中

src 目录中的所有文件拖入您的应用程序,然后导入库头文件。

#import "NimbusKitAttributedLabel.h"

如果您想使用 NSMutableAttributedString 中的内部辅助方法,请导入

#import "NSMutableAttributedString+NimbusKitAttributedLabel.h"

此分类头文件不包括在库头文件中。

使用 NIAttributedLabel

通常,使用 NIAttributedLabel 与使用 UILabel 类似。但这并不意味着你应该在每个可以使用的地方都开始使用 NIAttributedLabel。值得注意的是,创建和渲染一个 NIAttributedLabel 比创建和渲染相应的 UILabel 所需的时间要多得多,尤其是在与手动渲染文本相比。NIAttributedLabel 作为一个便利性设计,所以在设计您的应用程序时考虑到这一点 - 便利性是需要付出代价的!

通过代码创建标签

NIAttributedLabel 是 UILabel 的子类。当文本分配给标签时,标签的所有样式属性都应用于整个字符串。

NIAttributedLabel* label = [[NIAttributedLabel alloc] initWithFrame:CGRectZero];

// The internal NSAttributedString will apply all of UILabel's style attributes when
// we assign text.
label.text = @"Nimbus";

[label sizeToFit];

[view addSubview:label];

在 Interface Builder 中创建标签

您可以通过创建一个 UILabel 并将其类更改为 NIAttributedLabel 来在 Interface Builder 中使用属性化标签。这将允许您设置应用到整个字符串的标准 UILabel 样式。如果您需要设置字符串的特定部分的样式,则必须在代码中完成。

功能概述

  • 使用数据检测器自动链接检测
  • 链接属性
  • 显式链接
  • 内联图像
  • 下划线
  • 段落对齐
  • 描边
  • 字距微调
  • 在特定范围内设置丰富文本样式

链接

自动链接检测

自动链接检测通过NSDataDetector提供。

默认情况下数据检测是关闭的,可以通过将NIAttributedLabel::autoDetectLinks设置为YES来启用。您可以通过修改NIAttributedLabel::dataDetectorTypes属性来配置要检测的数据类型。默认情况下只检测URL。

@注意 NIAttributedLabel未设计用于检测HTML锚标记(即<a>)。如果您想给文本特定范围附加URL,您必须使用NIAttributedLabel::addLink:range:.您可以使用NIAttributedLabelLinkAttributeName属性向有属性的字符串中添加链接。NIAttributedLabelLinkAttributeName的值必须是一个NSTextCheckingResult实例。

// Enable link detection on the label.
myLabel.autoDetectLinks = YES;

启用自动链接检测将自动启用与标签视图的用户交互,以便用户可以点击检测到的链接。

链接属性

检测到的链接将使用NIAttributedLabel::linkColor和NIAttributedLabel::highlightedLinkBackgroundColor来区别于标准文本。linkColor是任何链接的文本颜色,而highlightedLinkbackgroundColor是在链接被点击时围绕链接绘制的背景框架的颜色。您可以通过启用NIAttributedLabel::linksHaveUnderlines来轻松给链接添加下划线。您可以通过直接修改NIAttributedLabel::attributesForLinks属性来更详细地自定义链接属性。

关于性能的说明

自动链接检测开销很大。您可以选择通过启用NIAttributedLabel::deferLinkDetection来延迟自动链接检测。这将把链接检测移动到另一个后台线程。一旦检测到链接,标签将被重绘。

处理链接点击

NIAttributedLabelDelegate协议允许您处理用户点击链接时引发的事件。协议方法提供了点击点以及与被点击链接相关的数据。

- (void)attributedLabel:(NIAttributedLabel)attributedLabel didSelectTextCheckingResult:(NSTextCheckingResult)result atPoint:(CGPoint)point {
  [[UIApplication sharedApplication] openURL:result.URL];
}

显式链接

可以使用NIAttributedLabel::addLink:range:显式添加链接。

// Add a link to the string 'nimbus' in myLabel.
[myLabel addLink:[NSURL URLWithString:@"nimbus://custom/url"]
           range:[myLabel.text rangeOfString:@"nimbus"]];

内联图片

可以使用-insertImage:atIndex:等系列方法插入内联图片。

NIAttributedLabel* label = [NIAttributedLabel new];
label.text = @"NimbusKit 2.0";
label.font = [UIFont systemFontOfSize:24];

[label insertImage:[UIImage imageNamed:@"AppIcon60x60"] atIndex:@"NimbusKit".length
           margins:UIEdgeInsetsZero verticalTextAlignment:NIVerticalTextAlignmentMiddle];

label.frame = (CGRect){CGPointMake(20, 80), CGSizeZero};

[label sizeToFit];

[self.view addSubview:label];

生成以下输出

修改样式属性

下划线文本

要下划线整个标签

// Underline the whole label with a single line.
myLabel.underlineStyle = kCTUnderlineStyleSingle;

下划线修饰符也可以添加

// Underline the whole label with a dash dot single line.
myLabel.underlineStyle = kCTUnderlineStyleSingle;
myLabel.underlineStyleModifier = kCTUnderlinePatternDashDot;

下划线样式和修饰符可以混合以创建所需的效果,以下截图显示

@备注 下划线样式kCTUnderlineStyleThick不会绘制更粗的线条。

首行缩进段落

NIAttributedLabel支持使用UITextAlignmentJustify进行首行缩进文本。

 myLabel.textAlignment = UITextAlignmentJustify;

填充文本

myLabel.strokeWidth = 3.0;
myLabel.strokeColor = [UIColor blackColor];

正值填充宽度将仅绘制填充。

负数将用textColor填充填充范围。

myLabel.strokeWidth = -3.0;
myLabel.strokeColor = [UIColor blackColor];

对齐文本

对齐文本是字符间的点空间。正值对齐会增加字母间的空间。相应地,负数将减少空间。

myLabel.textKern = -6.0;

在特定范围修改样式

可以添加到整个标签的所有样式(以及默认的UILabel样式,如字体和文字颜色)也可以添加到文本的某个特定范围。

[myLabel setTextColor:[UIColor orangeColor] range:[myLabel.text rangeOfString:@"Nimbus"]];
[myLabel setFont:[UIFont boldSystemFontOfSize:22] range:[myLabel.text rangeOfString:@"iOS"]];

要求

NIAttributedLabel 必须使用 iOS 6 SDK 或更高版本编译。您必须链接到 CoreText 和 Core Graphics 框架。

版本历史

1.0.0,发布于2014年4月30日

初始发布。包括

  • 无依赖!
  • 链接检测。
  • 内联图像。
  • NSMutableAttributedString 上的辅助类别。

致谢

NIAttributedLabel 由 Jeff Verkoeyen 从 Nimbus 1.2.0 中提取出来 (http://jeffverkoeyen.com/ (@featherless))。

贡献者

您可以是第一个!现在发起一个pull request

许可

NimbusKit 的 Attributed Label 采用 BSD 三条款许可证。如需更宽松的许可证(无版权声明重新分发等),请联系 Jeff,邮箱为 [email protected],获取报价。