我一直在寻找一种使可点击链接正常工作的解决方案。当使用UITextView + NSAttributedString时,我可以使它工作,但是当它是UITableViewCell时,它只是不能正确地自动布局。

现在,我已将TTTAttributedLabel添加到我的项目中,并且它为 View 提供了完美的样式。链接也变为蓝色并带有下划线。

但是,单击它们不会执行任何操作。我确实在 Controller 上实现了TTTAttributedLabelDelegate,使 Storyboard 中的标签实现了MyLabel(这只是扩展了TTTAttributedLabel并具有委托(delegate)选项,因为我希望它们在同一函数中触发)。现在,我已经将 Controller 设置为我认为可能无法指向其自身的代表。

但是这些功能都没有被触发,我得到了断点并登录到其中。

我实现了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!

我的标签

导入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变为可单击状态,尽管我需要一个属性字符串,并且它基于HTML字符串。

最佳答案

The implementation of setAttributedText: 不会更新linkModels数组,而the implementation of setText: 会更新。我相信这就是导致您出现问题的原因。

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

The docs也包含以下警告:



该文档还显示了此示例用法:

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;

关于ios - TTTAttributedLabel链接正在设置样式,但不可单击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31179458/

10-09 16:24