CCHLinkTextView 1.2.0

CCHLinkTextView 1.2.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年5月

Claus Höfele维护。




Build Status  

CCHLinkTextView 使得在 UITextView 中嵌入链接并接收短按和长按时的事件变得非常简单。它的外观和行为与像 Twitterrific 或 Tweetbot 这样的流行应用中使用的表格单元格类似。CCHLinkTextView 基于 MIT 许可证。

CCHLinkTextView demo

查看变更了解最近更新的概述。

需要与人交流?我在 Twitter 上是claushoefele

替代方案

当使用 iOS 7 内置的通过 NSLinkAttributeName 实现的链接检测时,您会发现当用户按下链接一段时间后,只有此时才调用 textView:shouldInteractWithURL:inRange:。这种延迟会让用户感到沮丧,因为他们希望应用能够即时响应用户的点击。

UITextView 相比,CCHLinkTextViewUITableView 中表现很好 - 即使将 userInteractionEnabled 设置为 YES - 因为链接外的触摸事件会传递到 UITableView。此外,CCHLinkTextView 提供了短按和长按的事件。

OHAttributedLabelTTTAttributeLabel 相比,CCHLinkTextView 使用 Text Kit 功能编写,用于 iOS 7。这使得实现更简单,避免了使用 CoreText 的自定义绘制代码。

STTweetLabel 相比,CCHLinkTextViewUITextView 的子类,因为 UILabel 有有限的 Text Kit 支持,添加此功能可能相当棘手。CCHLinkTextView 支持所有 UITextView 的功能,也可以在故事板中使用。而 STTweetLabel 仅在某些热点词上放置链接,您可以使用 CCHLinkTextView 标记任意文本范围作为链接。

使用方法

安装

使用 CocoaPodsCCHLinkTextView 集成到 项目中。最低目标部署版本是 iOS 7.0,因为该项目使用 Text Kit 功能。

platform :ios, '7.0'
pod "CCHLinkTextView"

创建 CCHLinkTextView

可以通过 initWithFrame: 手动创建一个 CCHLinkTextView,或是在Storyboard内部创建。默认情况下,它是不可编辑和不可选的,因为这会干扰链接手势。否则,CCHLinkTextView 的行为与 UITextView 相同。

设置链接

可以通过在链接范围添加属性 CCHLinkAttributeName 来标记文本为链接。

NSMutableAttributedString *attributedText = [linkTextView.attributedText mutableCopy];
[attributedText addAttribute:CCHLinkAttributeName value:@"0" range:NSMakeRange(0, 20)];
linkTextView.attributedText = attributedText;

如果你有使用 NSLinkAttributeName 的代码,只需将其替换为 CCHLinkAttributeName 即可。

value 可以是你想要的内容,当链接触发时会提供。要接收链接事件,实现 CCHLinkTextViewDelegate 并设置 linkDelegate 属性。CCHLinkTextViewDelegate 提供了两个回调

- (void)linkTextView:(CCHLinkTextView *)linkTextView didTapLinkWithValue:(id)value;
- (void)linkTextView:(CCHLinkTextView *)linkTextView didLongPressLinkWithValue:(id)value;

第一个方法是针对点击调用的,第二个是针对长按的。

要设置链接的样式,使用 linkTextAttributeslinkTextTouchAttributes。这些字典包含应用于链接的 NSAttributedString 属性,作为它们正常显示和触摸时的属性。默认情况下,linkTextAttributes 把颜色设置成前景色,而 linkTextTouchAttributes 设置为浅灰色背景。

使用 linkCornerRadius 将触摸时的背景变成一个圆角矩形。

高级设置

有一些设置可以让你调整 CCHLinkTextView 的行为

  • minimumPressDuration:手指必须按住链接的最短时间,手势才会被识别为长按(默认 = 0.5s)
  • allowableMovement:在手势被忽略之前,手指在链接上的最大移动距离(默认 = 10 点)
  • tapAreaInsets:扩展或缩小链接文本的点击区域(默认:{-5, -5, -5, -5})

可以使用 Xcode 的 Quick Look 功能调试 tapAreaInsets,它将显示 CCHLinkTextView 的可点击区域。

CCHLinkTextView 嵌入到表格视图单元格中

因为外部链接的手势会被转发到容器视图,所以 CCHLinkTextViewUITableViewCell 里面工作得很好。这意味着标准的代理方法,如 tableView:didSelectRowAtIndexPath: 会正常调用。

如果你想要捕捉对 UITableViewCell 的长按,你可以向 UITableView 注册一个 UILongPressGestureRecognizer。注意,你必须确保在 UILongPressGestureRecognizer 触发之前,CCHLinkTextView 的手势识别器失败。否则,对链接的长按将同时触发 CCHLinkTextViewDelegateUILongPressGestureRecognizer 回调。为了实现这一功能,只需调用以下代码即可(请参阅项目中此代码的示例)。

[self.longPressGestureRecognizer requireGestureRecognizerToFail:linkTextView.linkGestureRecognizer];

对于每个 CCHLinkTextView 都需要这样做。

版权(MIT

版权所有 (C) 2014 Claus Höfele

任何获得本软件及其相关文档副本(以下简称“软件”)的个人,即使是免费获得,也被允许在不受限制的情况下使用该软件,包括但不限于使用、复制、修改、合并、发布、分发、转授许可,并/或销售软件副本,以及允许向获得软件的人员提供如此副本,前提如下

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按照“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的的适用性及非侵权性。在任何情况下,作者或版权所有人不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是由于合同行为、侵权或任何其他行为引起的,与该软件或该软件的使用或其他经营管理有关。