带有 html 超链接的 UITextView 或 UILabel

Posted

技术标签:

【中文标题】带有 html 超链接的 UITextView 或 UILabel【英文标题】:UITextView or UILabel with html hyperlinks 【发布时间】:2020-05-02 08:34:21 【问题描述】:

我需要带有多个初始链接的文本。 在 android 中,我只是使用了简单的 html 字符串 示例:

"<a href=\"https://www.link.com\">Photo</a> The owner / <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.en\">CC BY-SA 3.0</a>"

只有当我点击单词对应的链接时它才有效。

我花了一天时间并没有设法找到简单的 ios 解决方案。 我尝试使用 UITextView 的扩展名:

extension UITextView 
func setHTMLFromString(text: String) 
    let modifiedFont = NSString(format:"<span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>" as NSString, text)



    let paragraph = NSMutableParagraphStyle()
    paragraph.alignment = .center


    let attrStr = try! NSAttributedString(
        data: modifiedFont.data(using: String.Encoding.unicode.rawValue, allowLossyConversion: true)!,
        options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue],
        documentAttributes: nil)

    self.attributedText = attrStr

但是链接不仅在我点击超链接世界时有效,而且在我点击它们之间的简单文本时也有效。而且我也没有设法在 textView(center) 中对齐此文本。

有人知道正确的方法吗?

【问题讨论】:

我已经收集了很多关于这个主题的优秀答案,并在 GithHub 上创建了一个小 blob,集成和使用非常简单。我不想讲太多细节,因为在上面的答案中已经对它们进行了彻底的解释。我的解决方案是基于这些答案。 HyperlinkedUILabel 【参考方案1】:

目前找不到文档,但仔细观察表明:

由于用手指点击不如用鼠标指针点击精确,因此链接会获得比文本本身更大的“点击区域”。

以您的示例-“照片所有者/CC BY-SA 3.0”-我可以点击ow 字符而不触发任何一个链接。如果我点击The,它会触发照片链接,如果我点击new /,它会触发该链接。


编辑

文本居中的一个选项...

在你的扩展中,改变

let modifiedFont = NSString(format:"<span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>" as NSString, text)

let modifiedFont = NSString(format:"<p style=\"text-align:center\"><span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span></p>" as NSString, text)

添加了&lt;p style=... 标签。

【讨论】:

感谢您的回答。也许你知道如何在我的扩展中对齐(中心)? @Dima - 很高兴它对你有用。为了其他遇到您的问题的人的利益,如果这回答了它,您应该将答案标记为已接受。

以上是关于带有 html 超链接的 UITextView 或 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITextView 或 UILabel 带有可点击的动作链接[重复]

即使在文本更改为没有任何链接的文本后,UITextView 超链接格式/功能仍然存在

获取 iphone sdk 中 uitextview 数组中的所有超链接?

iOS 文本自由复制 超链接监听

带有可点击链接但没有文本突出显示的 UITextView

带有图像和文本的 HTML 超链接