CCHLinkTextView
使得在 UITextView
中嵌入链接并接收短按和长按时的事件变得非常简单。它的外观和行为与像 Twitterrific 或 Tweetbot 这样的流行应用中使用的表格单元格类似。CCHLinkTextView
基于 MIT 许可证。
查看变更了解最近更新的概述。
需要与人交流?我在 Twitter 上是claushoefele。
当使用 iOS 7 内置的通过 NSLinkAttributeName
实现的链接检测时,您会发现当用户按下链接一段时间后,只有此时才调用 textView:shouldInteractWithURL:inRange:
。这种延迟会让用户感到沮丧,因为他们希望应用能够即时响应用户的点击。
与 UITextView
相比,CCHLinkTextView
在 UITableView
中表现很好 - 即使将 userInteractionEnabled
设置为 YES
- 因为链接外的触摸事件会传递到 UITableView
。此外,CCHLinkTextView
提供了短按和长按的事件。
与 OHAttributedLabel
和 TTTAttributeLabel
相比,CCHLinkTextView
使用 Text Kit 功能编写,用于 iOS 7。这使得实现更简单,避免了使用 CoreText 的自定义绘制代码。
与 STTweetLabel
相比,CCHLinkTextView
是 UITextView
的子类,因为 UILabel
有有限的 Text Kit 支持,添加此功能可能相当棘手。CCHLinkTextView
支持所有 UITextView
的功能,也可以在故事板中使用。而 STTweetLabel
仅在某些热点词上放置链接,您可以使用 CCHLinkTextView
标记任意文本范围作为链接。
使用 CocoaPods 将 CCHLinkTextView
集成到 项目中。最低目标部署版本是 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;
第一个方法是针对点击调用的,第二个是针对长按的。
要设置链接的样式,使用 linkTextAttributes
和 linkTextTouchAttributes
。这些字典包含应用于链接的 NSAttributedString
属性,作为它们正常显示和触摸时的属性。默认情况下,linkTextAttributes
把颜色设置成前景色,而 linkTextTouchAttributes
设置为浅灰色背景。
使用 linkCornerRadius
将触摸时的背景变成一个圆角矩形。
有一些设置可以让你调整 CCHLinkTextView
的行为
minimumPressDuration
:手指必须按住链接的最短时间,手势才会被识别为长按(默认 = 0.5s)allowableMovement
:在手势被忽略之前,手指在链接上的最大移动距离(默认 = 10 点)tapAreaInsets
:扩展或缩小链接文本的点击区域(默认:{-5, -5, -5, -5})可以使用 Xcode 的 Quick Look 功能调试 tapAreaInsets
,它将显示 CCHLinkTextView
的可点击区域。
CCHLinkTextView
嵌入到表格视图单元格中因为外部链接的手势会被转发到容器视图,所以 CCHLinkTextView
在 UITableViewCell
里面工作得很好。这意味着标准的代理方法,如 tableView:didSelectRowAtIndexPath:
会正常调用。
如果你想要捕捉对 UITableViewCell
的长按,你可以向 UITableView
注册一个 UILongPressGestureRecognizer
。注意,你必须确保在 UILongPressGestureRecognizer
触发之前,CCHLinkTextView
的手势识别器失败。否则,对链接的长按将同时触发 CCHLinkTextViewDelegate
和 UILongPressGestureRecognizer
回调。为了实现这一功能,只需调用以下代码即可(请参阅项目中此代码的示例)。
[self.longPressGestureRecognizer requireGestureRecognizerToFail:linkTextView.linkGestureRecognizer];
对于每个 CCHLinkTextView
都需要这样做。
版权所有 (C) 2014 Claus Höfele
任何获得本软件及其相关文档副本(以下简称“软件”)的个人,即使是免费获得,也被允许在不受限制的情况下使用该软件,包括但不限于使用、复制、修改、合并、发布、分发、转授许可,并/或销售软件副本,以及允许向获得软件的人员提供如此副本,前提如下
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按照“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的的适用性及非侵权性。在任何情况下,作者或版权所有人不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是由于合同行为、侵权或任何其他行为引起的,与该软件或该软件的使用或其他经营管理有关。