gpt4 book ai didi

objective-c - iOS 相当于 MacOS NSAttributedString initWithRTF

转载 作者:行者123 更新时间:2023-12-01 18:28:30 25 4
gpt4 key购买 nike

什么是 iOS 等效于 MacOS NSAttributedString initWithRTF ?

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

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

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

最佳答案

iOS 中没有等价物。 NSAttributedString的iOS版本只有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 View 从不构建属性文本,而是构建 HTML 和 CSS。

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

使用 Safari Web Inspector , 我开了a sample RTF file在我的 iPhone 上,查看了 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)……但至少你可以使用一些东西。

关于objective-c - iOS 相当于 MacOS NSAttributedString initWithRTF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com