测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可 | MIT |
Released最新发布 | 2014年12月 |
由 Olivier Halligon 维护。
不幸的是,我 已经没有时间维护这个类了。此外,由于 iOS6 开始,UILabel
现在原生支持 NSAttributedStrings
,这个组件现在已经完全过时了(并且维护它需要大量工作,但又能带来很小的收益,因为最近的项目都支持 iOS6+)。
注意:如果您愿意牵头并继续使其发展,请随时联系我,我可以给您一些 GIT 权限,以继续维护它。
如果您只支持 iOS6+,您可以使用 UILabel
和其原生的对 NSAttributedString
的支持,并使用我新的 OHAttributedStringAdditions
pod 更容易地构建 NSAttributedStrings
。
请注意,
OHAttributedLabel
的NSAttributedString
分类 正在构建 仅与 CoreText 兼容 的字符串,并且 不兼容 iOS6 中引入的UILabel
和UIKit
/TextKit
对NSAttributedString
的处理。这就是为什么您需要使用OHAttributedStringAdditions
的原因。
iOS6+ 的 NSAttributedString
和 TextKit 现在支持广泛的可能性(这使得 OHAttributedLabel
即使是毫无用处的),让您可以解析安全的 HTML,包括附件(图片)和链接等。所以 它甚至适合更高级的使用。请参阅 “OHAttributedStringAdditions” 仓库中的示例项目。
如果您仍然需要支持 iOS 版本 5 或更早的版本,我强烈建议使用由 @Cocoanetics 开发的 DTCoreText
库 作为替代品——这是一个比我的库更完整的框架,让您可以做更多的事情。
目录
此类允许您使用UILabel
和NSAttributedStrings
,以便在独一无二的标签中显示带有各种样式的文本(混合字体、颜色、大小等)。它是UILabel
的子类,添加了attributedText
属性。使用此属性,而不是text
属性,来设置和获取显示的NSAttributedString
。
注意:此类与iOS4.3+兼容,并在iOS6 SDK发布之前开发(在Apple将支持
NSAttributedLabel
添加到UILabel
类之前)。如果需要支持较早的iOS版本或提供额外功能,您仍然可以使用iOS6 SDK(希望attributedText
属性与Apple选择的属性相匹配)。
此类还支持超链接和URL。它可以自动检测文本中的链接,将它们着色并使其可触摸;您还可以通过将URL附加到文本的指定范围来在文本中添加"自定义链接",使其可触摸,甚至可以捕获对一个链接的触摸事件以执行您所需的操作。
除了此OHAttributedLabel
类之外,您还可以找到NS(Mutable)AttributedString
的类别,它有助于轻松创建和操作NSAttributedString
的常用属性(轻松更改字符串的一范围的字体、样式、颜色等)。请参阅头文件NSAttributedString+Attributes.h
以获取这些便利方法的列表。
示例
// Build an NSAttributedString easily from a NSString
NSMutableAttributedString* attrStr = [NSMutableAttributedString attributedStringWithString:txt];
// Change font, text color, paragraph style
[attrStr setFont:[UIFont fontWithName:@"Helvetica" size:18]];
[attrStr setTextColor:[UIColor grayColor]];
OHParagraphStyle* paragraphStyle = [OHParagraphStyle defaultParagraphStyle];
paragraphStyle.textAlignment = kCTJustifiedTextAlignment;
paragraphStyle.lineBreakMode = kCTLineBreakByWordWrapping;
paragraphStyle.firstLineHeadIndent = 30.f; // indentation for first line
paragraphStyle.lineSpacing = 3.f; // increase space between lines by 3 points
[attrStr setParagraphStyle:paragraphStyle];
// Change the color and bold of only one part of the string
[attrStr setTextColor:[UIColor redColor] range:NSMakeRange(10,3)];
[attrStr setTextBold:YES range:NSMakeRange(10,8)];
// Add a link to a given portion of the string
[attrStr setLink:someNSURL range:NSMakeRange(8,20)];
还有一个NSTextCheckingResult
的类别,它添加了extendedURL
属性。该属性对于标准链接情况返回与URL
值相同的值,以及对于NSTextCheckingTypeAddress
链接类型的格式化地图URL,在iOS版本6.0之前的iOS版本中打开Google Maps,并在iOS 6.0及更高版本中打开Apple的地图应用。
此库还提供了非常简单的标签解析器,帮助您使用非常简单的标签轻松构建NSAttributedStrings
。
OHASBasicHTMLParser
可以解析简单的HTML标签,如<b>
和<u>
以生成粗体和下划线文本,使用<font color='…'>
更改字体颜色等。类 OHASBasicMarkupParser
可以解析简单的标记,如*粗体文本*
、_下划线文本_
,并且可以使用类似{red|某些红色文本}
或{#ff6600|Yeah}
的标记来更改字体颜色。
// Example 1: parse HTML in attributed string
basicMarkupLabel.attributedText = [OHASBasicHTMLParser attributedStringByProcessingMarkupInAttributedString:basicMarkupLabel.attributedText];
// Example 2: parse basic markup in string
NSAttributedString* as = [OHASBasicMarkupParser attributedStringByProcessingMarkupInString:@"Hello *you*!"];
// Example 3: //process markup in-place in a mutable attributed string
NSMutableAttributedString* mas = [NSMutableAttributedString attributedStringWithString:@"Hello *you*!"];
[OHASBasicMarkupParser processMarkupInAttributedString:mas];
请注意,OHASBasicHTMLParser
旨在是一种非常简单的工具,仅用于帮助您更容易地构建格式化的字符串:这不是一个真正的和完整的HTML解释器,永远不会是。对于添加其他标签或标记语言等改进功能的功能,请参阅问题#88)
OHAttributedLabel
类支持从iOS5开始出现的UIAppearance
代理API。请参阅头文件中使用UI_APPEARANCE_SELECTOR
标记的选择器和属性。
这意味着如果您正在针对iOS5开发,您可以在应用初始化时通过一个调用自定义所有OHAttributedLabel
链接的颜色和下划线样式以适应您的应用程序设计,而无需对每个实例进行单独自定义。
例如,您可以在application:didFinishLoadingWithOptions:
代理方法中实现此方法,以便在您的whole app
中的所有OHAttributedLabel
实例中显示绿色的链接,而没有下划线,而不是默认的下划线蓝色。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[ [OHAttributedLabel appearance] setLinkColor:[UIColor colorWithRed:0.0 green:0.4 blue:0.0 alpha:1.0] ];
[ [OHAttributedLabel appearance] setLinkUnderlineStyle:kCTUnderlineStyleNone ];
return YES;
}
在您的项目中包含这些类有三种可能的方法。
pod "OHAttributedLabel"
在您的项目中包含OHAttributedLabel
OHAttributedLabel.xcodeproj
项目包含到Xcode4工作区OHAttributedLabel.xcodeproj
项目一次(1)libOHAttributedLabel.a
和CoreText.framework
添加到您的app项目的“链接二进制库”构建阶段(1)libOHAttributedLabel.a
,并将文件检查器中的“位置”下拉菜单更改到"相对到构建产物" (1)-ObjC
标志(如果尚未存在)在您的项目中添加libOHAttributedLabel.a
和头文件
cd OHAttributedLabel
make clean && make
(nb. rvm用户可能需要CC= && make clean && make
)build/Release-Combined
目录的内容复制到您项目中(例如 ThirdParty/OHAttributedLabel
)libOHAttributedLabel.a
和CoreText.framework
添加到您的app项目的“链接二进制库”构建阶段(1)"$(SRCROOT)/ThirdParty/OHAttributedLabel/include/**"
)-ObjC
标志(如果尚未存在)然后在您的应用程序代码中,当您想使用OHAttributedLabel方法时,您只需通过#import <OHAttributedLabel/OHAttributedLabel.h>
或#import <OHAttributedLabel/NSAttributedString+Attributes.h>
等导入头文件。
(1) 注意:这两步仅用于避免Xcode4中的一个错误,否则Xcode将无法检测到您的应用和库之间隐含的依赖关系。
有关更多信息以及导入/链接问题的 troubleshooting,请参阅专用页面。
很抱歉,目前还没有关于类的显式文档或文档集合(因为没有时间编写它),但是
OHAttributedLabel
发布在MIT许可下。它是由我(O.Halligon)创建和开发的,但我也要感谢所有贡献者,包括 @mattjgalloway, @stigi 和 @jparise 等等。
变更日志维护为此处的Wiki页面,您可以在此访问。
以下是使用此类的项目列表(对于告诉我的人来说)(非详尽的列表)。如果您使用此类,欢迎联系我,这样我们可以互相参考我们的项目,并在专门的wiki页面上引用您的应用!