测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2016年5月 |
由Mattt,Jonathan Hersh,Samuel Giddins维护。
一个用于替换UILabel
的组件,支持属性、数据检测、链接等
TTTAttributedLabel
是一个替换UILabel
的组件,可以简单高效地渲染属性字符串。作为一个附加功能,它还支持链接嵌入,无论是通过NSTextCheckingTypes
自动完成,还是手动指定URL、地址、电话号码、事件或交通信息的范围。
已在项目中使用此库?请在此问题中评论,让我们知道您的应用支持哪些iOS版本的版本。
尽管UILabel
在iOS 6中获得了对NSAttributedString
的支持,但TTTAttributedLabel
具有几个独特特性
还包括高级段落样式属性
attributedTruncationToken
firstLineIndent
highlightedShadowRadius
highlightedShadowOffset
highlightedShadowColor
lineHeightMultiple
lineSpacing
minimumLineHeight
maximumLineHeight
shadowRadius
textInsets
verticalAlignment
从版本1.10.0开始,TTTAttributedLabel
通过UIAccessibilityElement
协议支持语音覆盖。每个链接都可以单独选中,其accessibilityLabel
等于其字符串值,对于URL、电话号码和日期链接,还有相应的accessibilityValue
。希望更改此行为或提供自定义值的开发者应创建子类并覆盖accessibilityElements
。
tttattributedlabel
)CocoaPods 是推荐用于安装 TTTAttributedLabel
的方法。只需将以下行添加到您的 Podfile
中:
# Podfile
pod 'TTTAttributedLabel'
TTTAttributedLabel
可以显示普通文本和属性文本:只需将 NSString
或 NSAttributedString
传递给 setText:
设置器。不要设置 attributedText
属性。
// NSAttributedString
TTTAttributedLabel *attributedLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero];
NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"Tom Bombadil"
attributes:@{
(id)kCTForegroundColorAttributeName : (id)[UIColor redColor].CGColor,
NSFontAttributeName : [UIFont boldSystemFontOfSize:16],
NSKernAttributeName : [NSNull null],
(id)kTTTBackgroundFillColorAttributeName : (id)[UIColor greenColor].CGColor
}];
// The attributed string is directly set, without inheriting any other text
// properties of the label.
attributedLabel.text = attString;
// NSString
TTTAttributedLabel *label = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero];
label.font = [UIFont systemFontOfSize:14];
label.textColor = [UIColor darkGrayColor];
label.lineBreakMode = NSLineBreakByWordWrapping;
label.numberOfLines = 0;
// If you're using a simple `NSString` for your text,
// assign to the `text` property last so it can inherit other label properties.
NSString *text = @"Lorem ipsum dolor sit amet";
[label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
NSRange boldRange = [[mutableAttributedString string] rangeOfString:@"ipsum dolor" options:NSCaseInsensitiveSearch];
NSRange strikeRange = [[mutableAttributedString string] rangeOfString:@"sit amet" options:NSCaseInsensitiveSearch];
// Core Text APIs use C functions without a direct bridge to UIFont. See Apple's "Core Text Programming Guide" to learn how to configure string attributes.
UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:14];
CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
if (font) {
[mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange];
[mutableAttributedString addAttribute:kTTTStrikeOutAttributeName value:@YES range:strikeRange];
CFRelease(font);
}
return mutableAttributedString;
}];
首先,我们创建和配置标签,这与实例化 UILabel
的方式相同。当使用 -setText:afterInheritingLabelAttributesAndConfiguringWithBlock:
方法时,标签上设置的任何文本属性都将继承为基础属性。在这个例子中,子串 "ipsum dolar",将以粗体显示,使标签看起来像 "Lorem ipsum dolar sit amet",大小为 14 的 Helvetica,颜色为深灰色。
IBDesignable
TTTAttributedLabel
包含 IBInspectable
和 IB_DESIGNABLE
标注,以支持在 Interface Builder 中配置标签。但是,如果您在构建时看到以下警告...
IB Designables: Failed to update auto layout status: Failed to load designables from path (null)
IB Designables: Failed to render instance of TTTAttributedLabel: Failed to load designables from path (null)
...那么您很可能是将 TTTAttributedLabel
作为静态库使用,这不支持 IB 标注。一些解决方案包括
use_frameworks!
的 CocoaPods 将 TTTAttributedLabel
安装为动态框架,或者使用 CarthageTTTAttributedLabel
除了支持富文本外,TTTAttributedLabel
还可以自动检测日期、地址、URL、电话号码、交通信息等链接,并允许您嵌入自己的链接。
label.enabledTextCheckingTypes = NSTextCheckingTypeLink; // Automatically detect links when the label text is subsequently changed
label.delegate = self; // Delegate methods are called when the user taps on a link (see `TTTAttributedLabelDelegate` protocol)
label.text = @"Fork me on GitHub! (http://github.com/mattt/TTTAttributedLabel/)"; // Repository URL will be automatically detected and linked
NSRange range = [label.text rangeOfString:@"me"];
[label addLinkToURL:[NSURL URLWithString:@"http://github.com/mattt/"] withRange:range]; // Embedding a custom link in a substring
pod try TTTAttributedLabel
...或者克隆这个仓库,并在 Xcode 中构建/运行/测试 Espressos
项目,以查看 TTTAttributedLabel
的实际效果。如果您未安装 CocoaPods,请使用 [sudo] gem install cocoapods
进行安装。
cd Example
pod install
open Espressos.xcworkspace
TTTAttributedLabel
在 MIT 许可下可用。请参阅 LICENSE 文件以获取更多信息。