2012-06-06 42 views
0

什麼是iOS相當於MacOS NSAttributedString initWithRTF?iOS相當於MacOS NSAttributedString initWithRTF

Application Kit通過添加對RTF,RTFD和HTML(帶或不帶附件),圖形屬性(包括字體和標尺屬性),繪製屬性字符串的方法以及計算重要語言的方法來擴展Foundation的NSAttributedString類單位。

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

我需要在iOS應用程序中處理一小段RTF數據。 謝謝!

回答

2

在iOS中沒有相應的功能。 iOS版本NSAttributedString僅具有CoreText所需的功能,CoreText本身僅具有UI類所需的功能,並且不包括RTF處理。

據我所知,至少5.0,UIWebView是處理RTF的唯一方法。見https://developer.apple.com/library/ios/#qa/qa1630/_index.html。這可能已經改變了5.1,因爲一些蘋果的其他應用程序似乎現在處理富文本(但再次,這些應用程序可能已經從UITextView改爲UIWebView ...)。


UIWebView不給你任何的方式來訪問從RTF的屬性文本,因爲Web視圖從未建立歸因文字代替,它建立HTML和CSS。

好消息是,這個HTML和CSS在DOM中可用。至少對於某些類型來說,這不是真的 - 你看到的只是一個不透明的包裝,它被WebKit內部的一些魔法代碼渲染而無法訪問 - 但RTF不是這些類型之一。

使用Safari Web Inspector,我在iPhone上打開了a sample RTF file,並查看了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)......但至少東西,你可以使用。

+2

謝謝。我設法使用UIWebView從純文本中剔除rtf文件,並使用document.documentElement.innerText參數 – TrekOnTV2017

+0

@ radvan72:stringByEvaluatingJavaScriptFromString方法:聰明的解決方案。我在想,UIWebView是不好的,除非你想要做的就是顯示RTF,但你實際上可以通過這種方式獲得內容... – abarnert

+0

太好了,謝謝!這可能是蘋果開發者網站上我讀過的最棒的東西。您是否知道是否有任何方法可以通過WebView獲取RTF中的歸屬文本? – JohnK