4

目前我正在开发用于网络聊天的 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

目前我有两个想法如何显示消息:

  1. 将 UIWebView 添加到表格单元格。但我认为这不是一个选项,因为我们会有很多消息和很多 WebView。
  2. 将 UITextView 添加到表格单元格,解析 HTML 标记并对属性字符串进行必要的更改。但是 UITextView 不支持图像(如果我是对的)。

还有其他(更好的)方法来显示此类数据(样式文本+图像)吗?

4

3 回答 3

3

使用每个单元格的 webview 不会像您怀疑的那样工作。Webviews 需要相当长的时间来渲染,这意味着您可能最终会看到旧的 webview 内容暂时显示在重用的单元格中,直到新的内容呈现。Webview 也是一个相当重量级的 UI 元素,你会遇到在屏幕上同时更新许多元素的性能问题。

您需要使用DTCoreText 之类的库将获得的 HTML 文本解析为属性字符串。从这里开始,如果您可以针对 iOS 6 或更高版本,您可以attributedText在标准UILabel. 如果您需要针对早期的 iO​​S 版本,您可以再次使用 DTCoreText,特别是DTAttributedLabelDTAttributedTextCell组件。

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

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

于 2013-04-08T07:30:54.183 回答
1

你可以从RTLabel 的东西中得到灵感。它正在做你想做的事情。

于 2013-04-08T07:01:55.527 回答
0

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

于 2014-10-02T11:21:40.873 回答