如何在 TTTAttributedLabel 中将 HTML 锚点设为可点击链接?

Posted

技术标签:

【中文标题】如何在 TTTAttributedLabel 中将 HTML 锚点设为可点击链接?【英文标题】:How to make an HTML anchor as clickable link in TTTAttributedLabel? 【发布时间】:2014-09-25 06:54:29 【问题描述】:

我有一个 ios 应用程序,它从服务器获取一段文本并将其显示在 TTTAttributedLabel 中。显示的文本是从 html 中剥离出来的。

例如

原始 HTML

<p>
  Hello <a href="http://www.google.com">World!</a>
</p>

TTTAttributedLabel 中的文本显示

Hello World!

但是,我希望“世界”这个词可以像在 HTML 中一样被点击。我知道 TTTAttributedLabel 可以这样使用

TTTAttributedLabel *tttLabel = <# create the label here #>;
NSString *labelText = @"Hello World!";
tttLabel.text = labelText;
NSRange r = [labelText rangeOfString:@"World"]; 
[tttLabel addLinkToURL:[NSURL URLWithString:@"http://www.google.com"] withRange:r];

但是如果“世界”这个词在文本中出现了不止一次,上面的代码就会出错。

任何人都可以提出一种更好的方法来处理这种情况吗? 谢谢

【问题讨论】:

您找到解决方案了吗? 请看我下面的评论。 【参考方案1】:

我最终使用NSAttributedString 来处理这个问题。这是我的代码。

TTTAttributedLabel *_contentLabel = [[TTTAttributedLabel alloc] init];
_contentLabel.backgroundColor = [UIColor clearColor];
_contentLabel.numberOfLines = 0;
_contentLabel.enabledTextCheckingTypes = NSTextCheckingTypeLink;
_contentLabel.delegate = self;

_contentLabel.text = [[NSAttributedString alloc] initWithData:[[_model.content trimString]
                                                               dataUsingEncoding:NSUnicodeStringEncoding]
                                                      options:@ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType 
                                           documentAttributes:nil
                                                        error:nil];

另外,在我的应用程序中,我需要即时更新_contentLabel 的字体大小。这是代码。

NSFont *newFont = ...; // new font

NSMutableAttributedString* attributedString = [_contentLabel.attributedText mutableCopy];

[attributedString beginEditing];
[attributedString enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attributedString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) 
    [attributedString removeAttribute:NSFontAttributeName range:range];
    [attributedString addAttribute:NSFontAttributeName value:newFont range:range];
];
[attributedString endEditing];

_contentLabel.text = [attributedString copy];

【讨论】:

感谢这对我也有用..谢谢!我有来自服务器的带有 href 标记的文本... 如果您使用 swift,如果您尝试将 NSAttributedString 分配给 TTTAttributedLabeltext 变量,则会出错。改用.setText(AnyObject),一切都会正常运行。

以上是关于如何在 TTTAttributedLabel 中将 HTML 锚点设为可点击链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中为 TTTAttributedLabel LinkAttributes 添加 NSDictionary UIColor

如何在 Swift 中的 TTTAttributedLabel、OHAttributedLabel 或 SETextView 上设置“NSBackgroundColorAttributeName”

如何将 ASTextNode 与 TTTAttributedLabel 一起使用

如何将自定义字体应用于 TTTAttributedLabel

如何减少链接长度或为 TTTAttributedLabel 中检测到的链接设置固定长度

TTTAttributedLabel 和链接弹出框