iOS開(kāi)發(fā)之屬性文本
與NSString類(lèi)似,在iOS中AttributedString也分為NSAttributedString和NSMutableAttributedString,不同的是,AttributedString對(duì)象多了一個(gè)Attribute的概念,一個(gè)AttributedString的對(duì)象包含很多的屬性,每一個(gè)屬性都有其對(duì)應(yīng)的字符區(qū)域,在這里是使用NSRange來(lái)進(jìn)行描述的。
使用AttributedString的方式通常有兩種:
-
首先初始化一個(gè)NSMutableAttributedString,然后向里面添加文字樣式,最后將它賦給控件的AttributedText,該方法適合于文本較少而又需要分段精細(xì)控制的情況。
NSString *originStr = @"Hello,World";//方式一 //創(chuàng)建 NSMutableAttributedString NSMutableAttributedString *attributedStr01 = [[NSMutableAttributedString alloc] initWithString: originStr]; //添加屬性 //給所有字符設(shè)置字體為Zapfino,字體高度為15像素 [attributedStr01 addAttribute: NSFontAttributeName value: [UIFont fontWithName: @"Zapfino" size: 15] range: NSMakeRange(0, originStr.length)]; //分段控制,最開(kāi)始4個(gè)字符顏色設(shè)置成藍(lán)色 [attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor blueColor] range: NSMakeRange(0, 4)]; //分段控制,第5個(gè)字符開(kāi)始的3個(gè)字符,即第5、6、7字符設(shè)置為紅色 [attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor redColor] range: NSMakeRange(4, 6)]; //賦值給顯示控件label01的 attributedText _label01.attributedText = attributedStr01;
-
首先創(chuàng)建屬性字典,初始化各種屬性,然后和需要控制的文本一起創(chuàng)建并賦值給控件的AttributedText,該方法適合于需要控制的文本較多整體控制的情況,通常是從文件中讀取的大段文本控制。
//方式二//創(chuàng)建屬性字典 NSDictionary *attrDict = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15], NSForegroundColorAttributeName: [UIColor blueColor] }; //創(chuàng)建 NSAttributedString 并賦值 _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict];
通過(guò)對(duì)比兩個(gè)例子可以看出,方式一比較容易處理復(fù)雜的格式,但是屬性設(shè)置比較繁多復(fù)雜,而方式二的屬性設(shè)置比較簡(jiǎn)單明了,卻不善于處理復(fù)雜多樣的格式控制,但是不善于并不等于不能,可以通過(guò)屬性字符串分段的方式來(lái)達(dá)到方式一的效果。
//方式二的分段處理
//第一段
NSDictionary *attrDict1 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],
NSForegroundColorAttributeName: [UIColor blueColor] };
NSAttributedString *attrStr1 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(0, 4)] attributes: attrDict1];
//第二段
NSDictionary *attrDict2 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],
NSForegroundColorAttributeName: [UIColor redColor] };
NSAttributedString *attrStr2 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(4, 3)] attributes: attrDict2];
//第三段
NSDictionary *attrDict3 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],
NSForegroundColorAttributeName: [UIColor blackColor] };
NSAttributedString *attrStr3 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange:
NSMakeRange(7, originStr.length - 4 - 3)] attributes: attrDict3];
//合并
NSMutableAttributedString *attributedStr03 = [[NSMutableAttributedString alloc] initWithAttributedString: attrStr1];
[attributedStr03 appendAttributedString: attrStr2];
[attributedStr03 appendAttributedString: attrStr3];
_label03.attributedText = attributedStr03;
s屬性文本可以設(shè)置21個(gè)屬性。
// NSFontAttributeName 設(shè)置字體屬性,默認(rèn)值:字體:Helvetica(Neue) 字號(hào):12
// NSForegroundColorAttributeNam 設(shè)置字體顏色,取值為 UIColor對(duì)象,默認(rèn)值為黑色
// NSBackgroundColorAttributeName 設(shè)置字體所在區(qū)域背景顏色,取值為 UIColor對(duì)象,默認(rèn)值為nil, 透明色
// NSLigatureAttributeName 設(shè)置連體屬性,取值為NSNumber 對(duì)象(整數(shù)),0 表示沒(méi)有連體字符,1 表示使用默認(rèn)的連體字符
// NSKernAttributeName 設(shè)定字符間距,取值為 NSNumber 對(duì)象(整數(shù)),正值間距加寬,負(fù)值間距變窄
// NSStrikethroughStyleAttributeName 設(shè)置刪除線,取值為 NSNumber 對(duì)象(整數(shù))
// NSStrikethroughColorAttributeName 設(shè)置刪除線顏色,取值為 UIColor 對(duì)象,默認(rèn)值為黑色
// NSUnderlineStyleAttributeName 設(shè)置下劃線,取值為 NSNumber 對(duì)象(整數(shù)),枚舉常量 NSUnderlineStyle中的值,與刪除線類(lèi)似
// NSUnderlineColorAttributeName 設(shè)置下劃線顏色,取值為 UIColor 對(duì)象,默認(rèn)值為黑色
// NSStrokeWidthAttributeName 設(shè)置筆畫(huà)寬度,取值為 NSNumber 對(duì)象(整數(shù)),負(fù)值填充效果,正值中空效果
// NSStrokeColorAttributeName 填充部分顏色,不是字體顏色,取值為 UIColor 對(duì)象
// NSShadowAttributeName 設(shè)置陰影屬性,取值為 NSShadow 對(duì)象
// NSTextEffectAttributeName 設(shè)置文本特殊效果,取值為 NSString 對(duì)象,目前只有圖版印刷效果可用:
// NSBaselineOffsetAttributeName 設(shè)置基線偏移值,取值為 NSNumber (float),正值上偏,負(fù)值下偏
// NSObliquenessAttributeName 設(shè)置字形傾斜度,取值為 NSNumber (float),正值右傾,負(fù)值左傾
// NSExpansionAttributeName 設(shè)置文本橫向拉伸屬性,取值為 NSNumber (float),正值橫向拉伸文本,負(fù)值橫向壓縮文本
// NSWritingDirectionAttributeName 設(shè)置文字書(shū)寫(xiě)方向,從左向右書(shū)寫(xiě)或者從右向左書(shū)寫(xiě)
// NSVerticalGlyphFormAttributeName 設(shè)置文字排版方向,取值為 NSNumber 對(duì)象(整數(shù)),0 表示橫排文本,1 表示豎排文本
// NSLinkAttributeName 設(shè)置鏈接屬性,點(diǎn)擊后調(diào)用瀏覽器打開(kāi)指定URL地址
// NSAttachmentAttributeName 設(shè)置文本附件,取值為NSTextAttachment對(duì)象,常用于文字圖片混排
// NSParagraphStyleAttributeName 設(shè)置文本段落排版格式,取值為 NSParagraphStyle 對(duì)象