OHAttributedLabel 3.5.5

OHAttributedLabel 3.5.5

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
Released最新发布2014年12月

Olivier Halligon 维护。



  • AliSoftware

弃用警告!

不幸的是,我 已经没有时间维护这个类了。此外,由于 iOS6 开始,UILabel 现在原生支持 NSAttributedStrings这个组件现在已经完全过时了(并且维护它需要大量工作,但又能带来很小的收益,因为最近的项目都支持 iOS6+)。

注意:如果您愿意牵头并继续使其发展,请随时联系我,我可以给您一些 GIT 权限,以继续维护它。

迁移出 OHAttributedLabel

针对 iOS6+ 应用

如果您只支持 iOS6+,您可以使用 UILabel 和其原生的对 NSAttributedString 的支持,并使用我新的 OHAttributedStringAdditions pod 更容易地构建 NSAttributedStrings

请注意,OHAttributedLabelNSAttributedString 分类 正在构建 仅与 CoreText 兼容 的字符串,并且 不兼容 iOS6 中引入的 UILabelUIKit / TextKitNSAttributedString 的处理。这就是为什么您需要使用 OHAttributedStringAdditions 的原因。

iOS6+ 的 NSAttributedString 和 TextKit 现在支持广泛的可能性(这使得 OHAttributedLabel 即使是毫无用处的),让您可以解析安全的 HTML,包括附件(图片)和链接等。所以 它甚至适合更高级的使用。请参阅 “OHAttributedStringAdditions” 仓库中的示例项目

针对非常高级的使用或支持 iOS5 或更早版本的应用

如果您仍然需要支持 iOS 版本 5 或更早的版本,我强烈建议使用由 @Cocoanetics 开发的 DTCoreText 作为替代品——这是一个比我的库更完整的框架,让您可以做更多的事情。


目录


关于这些类

OHAttributedLabel

此类允许您使用UILabelNSAttributedStrings,以便在独一无二的标签中显示带有各种样式的文本(混合字体、颜色、大小等)。它是UILabel的子类,添加了attributedText属性。使用此属性,而不是text属性,来设置和获取显示的NSAttributedString

注意:此类与iOS4.3+兼容,并在iOS6 SDK发布之前开发(在Apple将支持NSAttributedLabel添加到UILabel类之前)。如果需要支持较早的iOS版本或提供额外功能,您仍然可以使用iOS6 SDK(希望attributedText属性与Apple选择的属性相匹配)。

此类还支持超链接和URL。它可以自动检测文本中的链接,将它们着色并使其可触摸;您还可以通过将URL附加到文本的指定范围来在文本中添加"自定义链接",使其可触摸,甚至可以捕获对一个链接的触摸事件以执行您所需的操作。

NSAttributedString和NSTextChecking扩展

除了此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的地图应用。

OHASMarkupParsers和简单的标记来轻松构建格式化的字符串

此库还提供了非常简单的标签解析器,帮助您使用非常简单的标签轻松构建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;
}

如何在您的项目中使用

在您的项目中包含这些类有三种可能的方法。

  1. 使用Cocoapods

    • 在Podfile中添加pod "OHAttributedLabel"
  2. 在您的项目中包含OHAttributedLabel

    • OHAttributedLabel.xcodeproj项目包含到Xcode4工作区
    • 针对“iOS设备”(而非模拟器)构建这个OHAttributedLabel.xcodeproj项目一次(1)
    • libOHAttributedLabel.aCoreText.framework添加到您的app项目的“链接二进制库”构建阶段(1)
    • 在您的项目导航器上选择刚添加到您的app项目中的libOHAttributedLabel.a,并将文件检查器中的“位置”下拉菜单更改到"相对到构建产物" (1)
    • 在“其他链接器标志”构建设置中添加-ObjC标志(如果尚未存在)
  3. 在您的项目中添加libOHAttributedLabel.a和头文件

    • cd OHAttributedLabel
    • make clean && make (nb. rvm用户可能需要CC= && make clean && make)
    • build/Release-Combined目录的内容复制到您项目中(例如 ThirdParty/OHAttributedLabel
    • libOHAttributedLabel.aCoreText.framework添加到您的app项目的“链接二进制库”构建阶段(1)
    • 在构建设置中添加OHAttributedLabel头文件至“头文件搜索路径”(例如 "$(SRCROOT)/ThirdParty/OHAttributedLabel/include/**"
    • 在“其他链接器标志”构建设置中添加-ObjC标志(如果尚未存在)

然后在您的应用程序代码中,当您想使用OHAttributedLabel方法时,您只需通过#import <OHAttributedLabel/OHAttributedLabel.h>#import <OHAttributedLabel/NSAttributedString+Attributes.h>等导入头文件。

(1) 注意:这两步仅用于避免Xcode4中的一个错误,否则Xcode将无法检测到您的应用和库之间隐含的依赖关系。

有关更多信息以及导入/链接问题的 troubleshooting,请参阅专用页面

示例代码 & 其他文档

很抱歉,目前还没有关于类的显式文档或文档集合(因为没有时间编写它),但是

  • 方法名称应该具有自解释性(希望如此),因为我尊重标准的ObjC命名约定。
  • 头文件中也包含类似doxygen/javadoc的文档,应该也能帮您描述方法
  • 提供的示例("AttributedLabel Example.xcworkspace")也应该表现出相当典型的使用 —— 包括对齐文本、动态修改文本范围内样式/属性、添加自定义链接、创建具有自定义行为的特殊链接(例如捕获@提及和#标签),以及自定义链接的外观/颜色。

许可 & 致谢

OHAttributedLabel发布在MIT许可下。它是由我(O.Halligon)创建和开发的,但我也要感谢所有贡献者,包括 @mattjgalloway, @stigi 和 @jparise 等等。

变更日志 — 修订历史

变更日志维护为此处的Wiki页面,您可以在此访问。

使用此类的项目

以下是使用此类的项目列表(对于告诉我的人来说)(非详尽的列表)。如果您使用此类,欢迎联系我,这样我们可以互相参考我们的项目,并在专门的wiki页面上引用您的应用!