【问题标题】:swift: The HTML data converted to NSAttributed string doesn't make the links clickable in labelswift:转换为 NSAttributed 字符串的 HTML 数据不会使标签中的链接可点击
【发布时间】:2019-09-13 12:33:12
【问题描述】:

我有一个 HTML 格式的文本。我正在使用 NSAttributed 字符串的属性来解析它。它很好地解析文本并显示在标签上。但是,锚标记的解析不会使链接可点击。这是我用于解析的以下代码。

extension String {
var htmlToAttributedString: NSAttributedString? {
    guard let data = data(using: .utf8) else { return NSAttributedString() }
    do {
        return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil)
    } catch {
        return NSAttributedString()
    }
}
var htmlToString: String {
    return htmlToAttributedString?.string ?? ""
}

当我运行应用程序并将值赋予标签时:

text = "<p>This is <a href=\"http://www.google.com\">Google Home</a></p>"
simpleTextLabel.attributedText = text.htmlToAttributedString

iOS App 上的输出如下所示,但单击时没有任何反应:

这是Google Home

如何让它在 safari 中打开?

【问题讨论】:

  • 如何显示字符串?哪个操作系统?
  • 对不起,我刚刚编辑了这个问题以明确。它的iOS
  • 默认情况下不可点击的是UILabel(如果simpleTextLabel 是其中之一)。这是UILabel 的正常行为。使用UITextView,或欺骗标签。
  • 谢谢。那行得通。很棒的解决方案。

标签: html ios swift nsattributedstring


【解决方案1】:

从你的线路:

simpleTextLabel.attributedText = text.htmlToAttributedString

我们可以假设simpleTextLabelUILabel

UILabel 的基本行为不能“交互”。您可以在其上添加轻击手势,但会将其转换为 UIButton

有一些技巧可以让UILabel 成为可能,找到它被点击的确切位置,检查是否有链接等。 寻找“UILabel Clickable”:Create tap-able "links" in the NSAttributedString of a UILabel? 等。甚至还有一些第三方库。

(以我的拙见)将其视为“黑客”。

有一个很好的WWDC 2018 Session: TextKit Best Practices。在 2:34,它解释说,如果您需要与显示的文本进行交互,请首选 UITextView 而不是 UILabel

为此有一个UITextViewDelegate 方法:textView(_:shouldInteractWith:in:interaction:)

请注意,UITextViewUILabel 的呈现方式存在细微差别。如果你把它们叠加起来,它们的“起点”就不一样了,布局有点不同。但是,只要稍作改动,就可以保持相同(例如:How can I make a UITextView layout text the same as a UILabel?)。

还要注意,根据 UITextViewUILabel 视觉渲染的小修改,用户不会注意到差异(事实上,这很重要,除了使用 UITextView 的本机方法之外/UITextViewDelegate 让其他开发人员之后很容易理解,或者如果您需要做一些小修改,则可以在几个月内理解)。

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多