小编典典

UITextView中的HTML格式

swift

我是iOS开发的新手,现在正在开发可接收某种JSON数据的应用程序。但是一些后端专家认为,如果他们只是直接从Word复制信息并将其粘贴到信息系统中,对用户会更好。所以我坐在这里,尝试在UITableView中创建可点击的链接。

我从Web解析数据并获取具有以下格式的字符串:

F&uuml;r mehr Informationen klicken sie <a href="http://www.samplelink.com/subpage.php?id=8">here</a>.

我已经尝试过UILabel,但是经过一些研究,我现在使用了经常建议使用的UITextView。在属性检查器中,我将其设置为属性文本并启用了链接检测。现在,文本显示为红色并且可以单击。

现在对我来说问题是,HTML标记和正确的(德语)字符集仍然丢失,我不知道如何以正确的方式显示它。

显示的字符串以这种方式解析:

    func showHTMLString(unformattedString: String) -> NSAttributedString{
    var attrStr = NSAttributedString(
        data: tmpString.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
        options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil,
        error: nil)
    return attrStr!
}

如果我用attrStr?.string正确的格式显示Textview 的Format,但链接也消失了。

有什么建议如何以正确的方式格式化显示的字符串?

在此先感谢AR4G4


阅读 311

收藏
2020-07-07

共1个答案

小编典典

问题在于您必须将“字符编码”选项从NSUnicodeStringEncoding更改为NSUTF8StringEncoding,才能以正确的方式加载您的html。我认为您应该创建一个字符串扩展只读计算属性,以将您的html代码转换为属性字符串:

Xcode 8.3.1•Swift 3.1

extension Data {
    var attributedString: NSAttributedString? {
        do {
            return try NSAttributedString(data: self, options:[NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil)
        } catch {
            print(error)
        }
        return nil
    }
}
extension String {
    var data: Data {
        return Data(utf8)
    }
}

let htmlStringCode = "F&uuml;r mehr Informationen klicken sie <a href=\"http://www.samplelink.com/subpage.php?id=8\">here</a>"

htmlStringCode.data.attributedString?.string ?? ""  // "Für mehr Informationen klicken sie here"

在你的情况下

yourTextView.attributedText = htmlStringCode.data.attributedString
2020-07-07