TTTAttributedLabel链接正在样式化,但不能点击

我一直在寻找解决scheme来获取可点击链接的工作。 当使用UITextView + NSAttributedString时,我可以得到这个工作,但是当它是一个UITableViewCell时,它不会正确地自动布局。

现在我已经将TTTAttributedLabel添加到了我的项目中,并且完美地performance了视图的风格。 链接也变成蓝色,并加下划线。

然而点击他们什么也不做。 我在我的控制器上实现了TTTAttributedLabelDelegate,在故事板中实现了MyLabel(它只是扩展了TTTAttributedLabel,并且具有委托选项,因为我希望它们在同一个函数内激发)中的标签。 现在我已经把控制器设置成了我认为可能无法指向自己的委托。

但是这些函数都没有被解雇,我得到了断点并login了它。

我实现了didSelectLinkWithUrl和didLongPressLinkWithUrl。

func attributedLabel(label: TTTAttributedLabel!, didSelectLinkWithURL url: NSURL!) { Debug.log("link clicked") } func attributedLabel(label: TTTAttributedLabel!, didLongPressLinkWithURL url: NSURL!, atPoint point: CGPoint) { Debug.log("link long clicked") } 

出口

 @IBOutlet weak var content: MyLabel! 

MyLabel

导入UIKit导入TTTAttributedLabel

 class MyLabel : TTTAttributedLabel, TTTAttributedLabelDelegate { override func didMoveToSuperview() { if (self.delegate == nil) { self.delegate = self } self.enabledTextCheckingTypes = NSTextCheckingType.Link.rawValue self.userInteractionEnabled = true } func attributedLabel(label: TTTAttributedLabel!, didSelectLinkWithURL url: NSURL!) { Debug.log("link clicked") } func attributedLabel(label: TTTAttributedLabel!, didLongPressLinkWithURL url: NSURL!, atPoint point: CGPoint) { Debug.log("link long clicked") } 

任何人都知道我可能会错过什么?

更新

我发现,只是粘贴在一个url f / e http://example.com变得活跃,实际上是可点击的,didSelectLinkWithUrl变得可点击,虽然我需要一个属性string,它是基于一个HTMLstring。

setAttributedText:的实现setAttributedText:不更新linkModels数组,而setText:实现。 我相信这是导致你的问题。

要解决这个问题,请设置标签的text属性而不是attributedText属性。

文档还包括这个警告:

TTTAttributedLabel可以显示纯文本和属性文本:只要将一个NSStringNSAttributedString传递给setText: setter即可。 永远不要分配给attributedText属性。

该文档还显示了这个示例用法:

 TTTAttributedLabel *attributedLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero]; NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"Tom Bombadil" attributes:@{ (id)kCTForegroundColorAttributeName : (id)[UIColor redColor].CGColor, NSFontAttributeName : [UIFont boldSystemFontOfSize:16], NSKernAttributeName : [NSNull null], (id)kTTTBackgroundFillColorAttributeName : (id)[UIColor greenColor].CGColor }]; // The attributed string is directly set, without inheriting any other text // properties of the label. attributedLabel.text = attString; 

亚伦·布拉格是正确的! 我曾经有同样的问题,但我得到了它在Swift中通过replace行:

 label.attributedText = attributedString 

与行:

 label.setText(attributedString) 

这被编译器接受,因为setText方法接受AnyObject。 我也增加了链接的属性string的字体,以便捕获我的水龙头,它现在正在工作! 我用这个截断链接,这是整个部分:

 label.lineBreakMode = .ByTruncatingHead label.attributedTruncationToken = NSMutableAttributedString(string: "... Show more", attributes: [NSForegroundColorAttributeName: UIColor.cueCyan(), NSLinkAttributeName: readMoreLink, NSFontAttributeName: UIFont.formFont(.Light, size: fontSize+24)!]) label.userInteractionEnabled = true label.delegate = self