在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)......但至少東西,你可以使用。
謝謝。我設法使用UIWebView從純文本中剔除rtf文件,並使用document.documentElement.innerText參數 – TrekOnTV2017
@ radvan72:stringByEvaluatingJavaScriptFromString方法:聰明的解決方案。我在想,UIWebView是不好的,除非你想要做的就是顯示RTF,但你實際上可以通過這種方式獲得內容... – abarnert
太好了,謝謝!這可能是蘋果開發者網站上我讀過的最棒的東西。您是否知道是否有任何方法可以通過WebView獲取RTF中的歸屬文本? – JohnK