在iOS应用程序中使用HTML标签显示文本的最佳方法?

时间:2013-04-08 06:49:47

标签: iphone ios objective-c

目前我正在使用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个想法如何显示消息:

  1. 将UIWebView添加到表格单元格。但我认为这不是一个选择,因为我们会有很多消息和很多WebView。
  2. 将UITextView添加到表格单元格,解析HTML标记并对属性字符串进行必要的更改。但是UITextView不支持图像(如果我是对的)。
  3. 是否有其他(更好)方式显示此类数据(样式文字+图片)?

3 个答案:

答案 0 :(得分:3)

使用每个单元格的webview不会像你怀疑的那样工作。 Webview需要花费大量时间进行渲染,这意味着您可能会在重新使用的单元格中暂时显示旧的webview内容,直到新内容呈现为止。 Webview也是一个非常重量级的UI元素,你会遇到性能问题,它们会立即在屏幕上更新它们。

您需要使用DTCoreText等库将您提供的HTML文本解析为属性字符串。从这里开始,如果您可以定位iOS 6或更高版本,则可以在标准attributedText上设置UILabel属性。如果您需要定位早期iOS版本,则可以再次使用DTCoreText,特别是DTAttributedLabelDTAttributedTextCell组件。

解析和NSAttributedString渲染都可以使用XML解析器和CoreText手动完成,但DTCoreText将使您的生活更轻松。

更新:您在评论中提到您希望支持<img/>。 DTCoreText确实有一些基本的图像支持,但如果您使用CoreText渲染文本,这是一个非常难的问题,因为您必须正确地在图像周围流动文本,并在核心文本渲染器中保留一些空间以放置图像。如果每个单元格只有一个图像,我建议您手动提取图像路径/网址,并在文本旁边放置一个UIImageView

答案 1 :(得分:1)

你可以从RTLabel的东西中获得灵感。你正在做同样的事情。

答案 2 :(得分:0)

您还可以使用本机iOS类将HTML转换为NSAttributedString。看下面的帖子 https://stackoverflow.com/a/18886718/1760527