iOS 中的NSAttributedString和链接

9
我正在尝试为使用CoreText处理和绘制的文本添加超链接。根据苹果关于CoreText的文档,我应该使用addAttribute:NSLinkAttributeName。然而,在iOS(4.3)上它说不认识NSLinkAttributeName。在我的文档搜索中,似乎NSLinkAttributeName仅存在于Mac上。它在iOS上可用吗?如果不可用,如何使用NSMutableAttributedString和CoreText创建文本部分的超链接?谢谢。

请注意,尽管此常量未公开定义,但在 OS X 上读取其值并将其用于语义不会受到任何阻碍(它是 NSLink,遵循几乎所有其他属性名称常量的模式)。就功能而言,如果我没记错的话,此属性在 CoreText 中并没有提供任何东西。 - danyowdee
5个回答

11

从iOS 7开始,UITextView支持带链接的属性字符串:

textView.attributedText = [[NSAttributedString alloc] initWithString:@"Stack Overflow" attributes:@{NSLinkAttributeName: @"http://stackoverflow.com"}];

默认情况下,链接呈现为蓝色文本。您可以使用UITextViewlinkTextAttributes属性更改样式。

如果您在UITextView上将editable设置为NO,链接将变为可点击状态。


6

Jeremy发布了JTextView,这是一款基于Core Text的UITextView替代品,支持包含链接在内的属性文本。

简而言之,JTextView:

  • 通过使用自定义名称为属性名并且属性值包含相应URL的表示来创建其自己的链接属性。
  • -drawRect:中,它使用数据检测器查找链接。如果找到链接,则设置其对应范围的自定义属性。
  • 在其轻击手势识别方法中,它获取包含轻击点的行框架。对于该行中的每个字形运行,它获取其属性并检查它们是否包含链接的自定义属性。如果是,则打开URL。

1
JTextView 的链接已经失效。请点击此处获取更多信息 - Hemang

2

使用UITextView,它会解析您的文本并将链接转换为蓝色下划线超链接:

textView.dataDetectorTypes = UIDataDetectorTypeLink;

2

我知道这是一个老问题,但是...

尝试使用NSMutableAttributedString。它有两个用于属性的方法:

void addAttribute:(NSString *)value range:(NSRange)

并且

void addAttributes:(NSDictionary *) range:(NSRange)

0

是的,它不存在。如果你将搜索范围缩小到iOS库,则不会返回NSLinkAttributeName的任何结果。它没有出现在这里... 官方上可能是私有的?

这篇好文章提到了超链接,但没有展示示例。我怀疑使用公共API方法是否可能。


有没有一种方法可以复制这些结果? - kdbdallas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接