带有 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)
添加了<p style=...
标签。
【讨论】:
感谢您的回答。也许你知道如何在我的扩展中对齐(中心)? @Dima - 很高兴它对你有用。为了其他遇到您的问题的人的利益,如果这回答了它,您应该将答案标记为已接受。以上是关于带有 html 超链接的 UITextView 或 UILabel的主要内容,如果未能解决你的问题,请参考以下文章
iOS UITextView 或 UILabel 带有可点击的动作链接[重复]
即使在文本更改为没有任何链接的文本后,UITextView 超链接格式/功能仍然存在