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
可以显示纯文本和属性文本:只要将一个NSString
或NSAttributedString
传递给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