一个包含数据检测器、链接、内联图像和直接可用的 Core Text 属性的 UILabel 替代品。
iOS 6 通过 attributedText
引入了对富文本的支持,但它仍缺少 Nim ubusKit 提供的几个重要功能
如果你不需要这些功能,应该考虑简单地使用 UILabel。
将 src
目录中的所有文件拖入您的应用程序,然后导入库头文件。
#import "NimbusKitAttributedLabel.h"
如果您想使用 NSMutableAttributedString
中的内部辅助方法,请导入
#import "NSMutableAttributedString+NimbusKitAttributedLabel.h"
此分类头文件不包括在库头文件中。
通常,使用 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];
您可以通过创建一个 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 框架。
初始发布。包括
NIAttributedLabel 由 Jeff Verkoeyen 从 Nimbus 1.2.0 中提取出来 (http://jeffverkoeyen.com/ (@featherless))。
您可以是第一个!现在发起一个pull request。
NimbusKit 的 Attributed Label 采用 BSD 三条款许可证。如需更宽松的许可证(无版权声明重新分发等),请联系 Jeff,邮箱为 [email protected],获取报价。