gpt4 book ai didi

swift - 如何使用 HTML 链接使 UIAlertController 文本消息上的链接可点击

转载 作者:行者123 更新时间:2023-11-30 11:45:37 24 4
gpt4 key购买 nike

我的 UIAlertController 可以正常显示所有 HTML 格式,但链接不可单击。这里的帖子假设我们知道链接在哪里,但短信来自 API,因此我无法控制特定的字符串。我希望有一个通用属性可以分配给 UIAlertController,以便链接变得可点击。谢谢

let htmlText = "Some text from API with random links here and there"
let alertController = UIAlertController(title: "Details", message:"", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
let attributedText = htmlText.html2AttributedString
alertController.setValue(attributedText, forKey: "attributedTitle")

这里是字符串扩展html2AttributedString但是这个扩展正在工作,所以不需要检查这部分:

extension String {
var html2AttributedString: NSAttributedString? {
do {
return try NSAttributedString(data: Data(utf8),
options: [.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil)
} catch {
print("error: ", error)
return nil
}
}
}

最佳答案

以标准方式这是不可能的,因为您无权访问 UIAlertController 内部的 UILabel在普通的 UILabel 中,您可以在 UILabel 上添加点击手势并处理该手势。所以这里你需要一个自定义的UIAlertController

但我建议您从 html 文本中导出链接并将其显示为操作按钮,如下所示:

var links : [String:NSURL] = [:]
let range = NSMakeRange(0, attributedText.length)
attributedText.enumerateAttribute(.link, in: range, options: .longestEffectiveRangeNotRequired) {attribute, range, pointer in

let text = attributedText.attributedSubstring(from: range).string
if let url = attribute as? NSURL {
links[text] = url
}
}

links.forEach { (linkText, url) in
alertController.addAction(UIAlertAction(title: linkText, style: .default, handler: {_ in
UIApplication.shared.openURL(url as URL)
}))
}

关于swift - 如何使用 HTML 链接使 UIAlertController 文本消息上的链接可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48857304/

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