目前我正在使用iOS客户端进行网络聊天。因此,聊天消息具有HTML标签(粗体,斜体,下划线,字体颜色,图像(微笑)等)。例如:
<b>bold</b> <i>italic</i> <!--smile:bird--><img style="vertical-align: middle;border: none;" alt="bird" src="http://www.site.com/engine/data/emo_chat/bird.gif" /><!--/smile--> ordinaty text
目前我有2个想法如何显示消息:
是否有其他(更好)方式显示此类数据(样式文字+图片)?
答案 0 :(得分:3)
使用每个单元格的webview不会像你怀疑的那样工作。 Webview需要花费大量时间进行渲染,这意味着您可能会在重新使用的单元格中暂时显示旧的webview内容,直到新内容呈现为止。 Webview也是一个非常重量级的UI元素,你会遇到性能问题,它们会立即在屏幕上更新它们。
您需要使用DTCoreText等库将您提供的HTML文本解析为属性字符串。从这里开始,如果您可以定位iOS 6或更高版本,则可以在标准attributedText
上设置UILabel
属性。如果您需要定位早期iOS版本,则可以再次使用DTCoreText,特别是DTAttributedLabel
或DTAttributedTextCell
组件。
解析和NSAttributedString
渲染都可以使用XML解析器和CoreText手动完成,但DTCoreText将使您的生活更轻松。
更新:您在评论中提到您希望支持<img/>
。 DTCoreText确实有一些基本的图像支持,但如果您使用CoreText渲染文本,这是一个非常难的问题,因为您必须正确地在图像周围流动文本,并在核心文本渲染器中保留一些空间以放置图像。如果每个单元格只有一个图像,我建议您手动提取图像路径/网址,并在文本旁边放置一个UIImageView
。
答案 1 :(得分:1)
你可以从RTLabel的东西中获得灵感。你正在做同样的事情。
答案 2 :(得分:0)
您还可以使用本机iOS类将HTML转换为NSAttributedString。看下面的帖子 https://stackoverflow.com/a/18886718/1760527