gpt4 book ai didi

ios - TTTAttributedLabel 链接正在设置样式但不可点击

转载 作者:搜寻专家 更新时间:2023-10-30 21:50:42 25 4
gpt4 key购买 nike

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

现在我已经将 TTTAttributedLabel 添加到我的项目中,它完美地设置了 View 的样式。链接也会变成蓝色并带有下划线。

但是点击它们没有任何反应。我确实在我的 Controller 上实现了 TTTAttributedLabelDelegate,使 Storyboard中的标签实现了 MyLabel(它只是扩展了 TTTAttributedLabel 并具有委托(delegate)选项,因为我希望它们在同一个函数中触发)。现在我已经将 Controller 设置为委托(delegate),我认为它可能无法指向自身。

但是这些函数都没有被触发,我在其中设置了断点和日志。

我实现了 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 can display both plain and attributed text: just pass an NSString or NSAttributedString to the setText: setter. Never assign to the attributedText property.

文档还展示了这个示例用法:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com