在iOS7中,蘋果引入了Text Kit——Text Kit是一個快速而又現代化的文字排版和渲染引擎。Text Kit在UIKit framework中的定義了一些類和相關協議,它最主要的做用就是爲程序提供文字排版和渲染的功能。在程序中,經過Text Kit能夠對文字進行存儲(store)、佈局(layout),以及用最精細的排版方式(例如文字間距、換行和對齊等)來顯示文本內容。TextKit的引入主要是爲了解決Core Text複雜難用,若是隻是從解決大部分功能來講,使用TextKit的開發效率會比Core Text高。TextKit 只是 對Core Text進行了一些易用性封裝,解決一些諸如簡單文字排版,文字樣式變換等基本需求。正則表達式
Text Kit具備不少優勢:文本控件UITextView、UITextField和UILabel是構建於Text Kit之上的。Text Kit徹底 掌控着文字的排版和渲染:能夠調整字距、行距、文字大小,指定的字體,對文字進行分頁或分欄,支持文本編輯、自定義文字截斷,支持文字的換行、摺疊和着色等處理,支持凸版印刷效果。數組
能夠從圖中看出,原生的文本控件都是構建在TextKit之上的,使用TextKit進行排版和渲染。而UIWebView是構建在WebKit上的,不能使用TextKit功能。瀏覽器
TextKit的做用服務器
兩個最重要的功能:架構
使用TextKit進行文本佈局流程佈局
實現的過程以下:字體
storage --> layoutManager --> textContainer --> textView動畫
理解:TextKit主要用於更精細的處理文本佈局以及進行復雜的圖文混排佈局,使用TextKit進行文本的佈局展現十分繁瑣,首先須要將顯示內容定義爲一個NSTextStorage對象,以後爲其添加一個佈局管理器對象NSLayoutManager,在NSLayoutManager中,須要進行NSTextContainer的定義,定義多了NSTextContainer對象則會將文本進行分頁。最後,將要展現的NSTextContainer放到具體的UITextView視圖上。編碼
從上面的介紹中,咱們能夠了解到Text Kit在UIKit中的做用很是重要。Text Kit在實際開發中具備以下特色:spa
下面咱們看看經過Text Kit,都能實現那些功能(這裏列出了是一些經常使用和重要功能):
AttributedString能夠設置屬性,具體來講:
NSFontAttributeName 設置字體屬性,默認值:字體:Helvetica(Neue) 字號:12 NSForegroundColorAttributeName 設置字體顏色,取值爲 UIColor對象,默認值爲黑色 NSBackgroundColorAttributeName 設置字體所在區域背景顏色,取值爲 UIColor對象,默認值爲nil, 透明色 NSLigatureAttributeName 設置連體屬性,取值爲NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符 NSKernAttributeName 設定字符間距,取值爲 NSNumber 對象(整數),正值間距加寬,負值間距變窄 NSStrikethroughStyleAttributeName 設置刪除線,取值爲 NSNumber 對象(整數) NSStrikethroughColorAttributeName 設置刪除線顏色,取值爲 UIColor 對象,默認值爲黑色 NSUnderlineStyleAttributeName 設置下劃線,取值爲 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線相似 NSUnderlineColorAttributeName 設置下劃線顏色,取值爲 UIColor 對象,默認值爲黑色 NSStrokeWidthAttributeName 設置筆畫寬度,取值爲 NSNumber 對象(整數),負值填充效果,正值中空效果 NSStrokeColorAttributeName 填充部分顏色,不是字體顏色,取值爲 UIColor 對象 NSShadowAttributeName 設置陰影屬性,取值爲 NSShadow 對象 NSTextEffectAttributeName 設置文本特殊效果,取值爲 NSString 對象,目前只有圖版印刷效果可用: NSBaselineOffsetAttributeName 設置基線偏移值,取值爲 NSNumber (float),正值上偏,負值下偏 NSObliquenessAttributeName 設置字形傾斜度,取值爲 NSNumber (float),正值右傾,負值左傾 NSExpansionAttributeName 設置文本橫向拉伸屬性,取值爲 NSNumber (float),正值橫向拉伸文本,負值橫向壓縮文本 NSWritingDirectionAttributeName 設置文字書寫方向,從左向右書寫或者從右向左書寫 NSVerticalGlyphFormAttributeName 設置文字排版方向,取值爲 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本 NSLinkAttributeName 設置連接屬性,點擊後調用瀏覽器打開指定URL地址 NSAttachmentAttributeName 設置文本附件,取值爲NSTextAttachment對象,經常使用於文字圖片混排 NSParagraphStyleAttributeName 設置文本段落排版格式,取值爲 NSParagraphStyle 對象
讀取文本
// 讀取文本 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"text.txt" ofType:nil]; //將txt到string對象中,編碼類型爲NSUTF8StringEncoding text = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
將不讓文字排版區域的path都保存下來,設置給TextContainer:
//將不讓文字排版區域的path都保存下來,設置給TextContainer - (void)configExcludeViews:(UITextView *)textView { if ((!self.exclusionViews) || (self.exclusionViews.count == 0)) { return; } NSMutableArray *excludePaths = [NSMutableArray arrayWithCapacity:self.exclusionViews.count]; for (ExclusionView *excludeView in self.exclusionViews) { //將排除不顯示文字的view依次加入到 _textView [textView addSubview:excludeView]; UIBezierPath *bezierPath = [excludeView createExcludeBezierPathWithSelf]; [excludePaths addObject:bezierPath]; } //將不顯示文字的區域,設置給 textView.textContainer self.textContainer.exclusionPaths = excludePaths; }
在表單驗證中,咱們常常會使用到正則表達式,由於咱們須要用它來判斷用戶輸入的字符是否爲合法的,若是是不合法的,那麼應該提示用戶輸入錯誤,並不讓提交至服務器。咱們也能夠經過正則表達式,從用戶輸入的字符串中過濾並獲取咱們想要的特定部分。總而言之,正則表達式是很強大的。
rangeOfString:options:
方法能夠作到)關鍵字樣式風格:
// 關鍵字樣式風格 -(void)markWord:(NSString *)word inTextStorage:(NSTextStorage *)textStorage;
搜索關鍵詞,設置富文本屬性改變樣式:
- (void) markWord:(NSString*)word inTextStorage:(NSTextStorage*)textStorage { //1. regx NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:word options:0 error:nil]; //2.經過正則表達式NSRegularExpression對象對TextView中的文本內容進行掃描,結果放到數組中 NSArray *matches = [regex matchesInString:self.textView.text options:0 range:NSMakeRange(0, [self.textView.text length])]; //3.設置文字效果(從集合中取出NSTextCheckingResult結果對象) for (NSTextCheckingResult *match in matches) { NSRange matchRange = [match range]; //4.爲找到的文本設置顏色 [textStorage addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:matchRange]; [textStorage addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:22.0f] range:matchRange]; }
上述代碼第1個是建立正則表達式NSRegularExpression
對象,其中的regularExpressionWithPattern
參數指定正則表達式。
第2個代碼經過正則表達式NSRegularExpression
對象對TextView
中的文本內容進行掃描,而後放到數組中。第3個代碼從集合中取出NSTextCheckingResult
結果對象。
第4個代碼是爲找到的文本設置顏色爲綠色風格。
NSTextStorage保存並管理UITextView要展現的文字內容,該類是NSMutableAttributedString的子類,因爲能夠靈活地往文字添加或修改屬性,因此適用於保存並修改文字屬性。
NSLayoutManager用於管理NSTextStorage其中的文字內容的排版佈局。
NSTextContainer則定義了一個矩形區域用於存放已經進行了排版並設置好屬性的文字。
三者是相互包含相互做用的層次關係。