Text Kit入門

更詳細的內容能夠參考官方文檔 《Text Programming Guide for iOS》html

「Text Kit指的是UIKit框架中用於提供高質量排版服務的一些類和協議,它讓程序可以存儲,排版和顯示文本信息,並支持排版所須要的全部特性,包括字距調整、連寫、換行和對齊等。」ios

之前,若是咱們想實現複雜的文本排版,例如在textView中顯示不一樣樣式的文本,或者圖片和文字混排,你可能就須要藉助於UIWebView或者深刻研究一下Core Text。在iOS6中,UILabelUITextFieldUITextView增長了一個NSAttributedString屬性,能夠稍微解決一些排版問題,可是支持的力度還不夠。如今Text Kit徹底改變了這種現狀。app

Text Kit

Text Kit是基於Core Text構建的快速、先進的文本排版和渲染引擎,而且與UIKit很好的集合。UITextViewUITextFieldUILabel都已經基於Text Kit從新構建,因此它們都支持分頁文本、文本包裝、富文本編輯、交互式文本着色、文本摺疊和自定義截取等特性。全部這些UI控件如今都以一樣的方式構建,在它們後面,一個NSTextStorage對象保存着文本的主要信息,它自己是NSMutableAttributedString的子類,支持分批編輯。這就意味着你能夠改變一個範圍內的字符的樣式而不用總體替換文本內容。框架

[self.textView.textStorage beginEditing];
[self markWord:@"Alice" inTextStorage:self.textView.textStorage];
[self.textView.textStorage endEditing];

Text storage管理者一系列的NSLayoutManager對象,當它的字符或者屬性改變時會通知到本身所管理的layout Manager對象以便它們做出相應的反應。在layout manager上面是一個NSTextContainer對象,用於爲layout manager定義座標系和一些幾何特性。例如,若是你想UITextView中的文本環繞在一張圖片四周,你能夠給text container設定一個排除路徑(exclusion path)。ide

UIBezierPath *exclusion = ButterflyBezierPath;
self.textView.textContainer.exclusionPaths = @[exclusion];

Exclusion Path

Text container可以處理擊中測試(hit tests),因此能夠定位到點擊的字符在文本中的位置。此外它還提供一些代理方法讓開發者可以本身定義連接點擊後的處理事件。測試

TextKit

經過基於Text Kit從新構建UILabelUITextFieldUITextView,蘋果給開發者更大的靈活性和能力來設計富文本視圖,同時簡化了這些控件的使用,由於它們是以一樣的方式設計的,全部這些好處都是站在巨人(Core Text)的肩上。一般更強大的功能和靈活性也就意味着須要更多的設置和管理,可是,若是你只是想顯示一段簡單的文本,你仍是能夠像之前同樣使用。ui

self.textLabel.text = @"Hello Text Kit";

本文翻譯自《iOS 7: Text Kit》spa

Posted by TracyYih - Oct 17 2013
如需轉載,請註明: 本文來自 Esoft Mobile翻譯

相關文章
相關標籤/搜索