我是iOS开发的新手,现在正在开发可接收某种JSON数据的应用程序。但是一些后端专家认为,如果他们只是直接从Word复制信息并将其粘贴到信息系统中,对用户会更好。所以我坐在这里,尝试在UITableView中创建可点击的链接。
我从Web解析数据并获取具有以下格式的字符串:
Fü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,但链接也消失了。
attrStr?.string
有什么建议如何以正确的方式格式化显示的字符串?
在此先感谢AR4G4
问题在于您必须将“字符编码”选项从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ü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