1

什么是 iOS 等效于 MacOS NSAttributedString initWithRTF ?

Application Kit 扩展了 Foundation 的 NSAttributedString 类,增加了对 RTF、RTFD 和 HTML(带或不带附件)、图形属性(包括字体和标尺属性)、绘制属性字符串的方法以及计算重要语言单位的方法的支持。

- (id)initWithRTF:(NSData *)rtfData documentAttributes:(NSDictionary **)docAttributes

我需要在 iOS 应用程序中处理一小段 RTF 数据。谢谢!

4

1 回答 1

4

iOS 中没有等价物。iOS版NSAttributedString只有CoreText需要的功能,CoreText本身也只有UI类需要的功能,不包括RTF处理。

据我所知,至少从 5.0 开始,UIWebView是处理 RTF 的唯一方法。请参阅https://developer.apple.com/library/ios/#qa/qa1630/_index.html。这可能在 5.1 中发生了变化,因为 Apple 的其他一些应用程序现在似乎可以处理富文本(但话又说回来,这些应用程序可能刚刚从UITextView变为UIWebView……)。


UIWebView没有给您任何从 RTF 访问属性文本的方法,因为 Web 视图从不构建属性文本,而是构建 HTML 和 CSS。

好消息是这些 HTML 和 CSS 在 DOM 中可用。至少对于某些类型来说,这是不正确的——你所看到的只是一个不透明的包装器,它被 WebKit 中的一些你无法访问的魔术代码呈现——但 RTF 不是这些类型之一。

使用Safari Web Inspector,我在 iPhone 上打开了一个示例 RTF 文件,并查看了 DOM。它充满了这样的节点:

<span class="s2"><span class="bumpedFont16">m a test file. This is some </span></span>
<span class="s3"><span class="bumpedFont16">bold</span></span>

…这些类是<style>在它们第一次使用的标记之前用内联标记定义的。

因此,如果遍历具有文本的节点,该文本就像一个属性字符范围(尽管如果你真的想要开始和结束索引,你需要自己计算它们......),它的计算样式大致就像一个属性字典。当然,“大致相似”不是“相同”;计算样式如下所示:

direction: ltr; display: inline; font-family: 'Times New Roman'; font-size: 22px;
font-weight: bold; height: auto; margin-bottom: 0px; margin-top: 0px;
padding-right: 0px; text-align: left; width: auto;

所以,实际上与 NSAttributedString 不兼容,也没有那么好(当然,除非你的最终目标是创建 HTML)……但至少你可以使用一些东西。

于 2012-06-06T21:37:54.523 回答