* API: Character Attributes , NSAttributedString 共有21個屬性*
* 1. NSFontAttributeName ->設(shè)置字體屬性搀捷,默認(rèn)值:字體:Helvetica(Neue) 字號:12
* 2. NSParagraphStyleAttributeName ->設(shè)置文本段落排版格式翼雀,取值為 NSParagraphStyle 對象(詳情見下面的API說明)
* 3. NSForegroundColorAttributeName ->設(shè)置字體顏色帽哑,取值為 UIColor對象寇损,默認(rèn)值為黑色
* 4. NSBackgroundColorAttributeName ->設(shè)置字體所在區(qū)域背景顏色座泳,取值為 UIColor對象羹呵,默認(rèn)值為nil, 透明色
* 5. NSLigatureAttributeName ->設(shè)置連體屬性优构,取值為NSNumber 對象(整數(shù))琢融,0 表示沒有連體字符界牡,1 表示使用默認(rèn)的連體字符
* 6. NSKernAttributeName ->設(shè)置字符間距,取值為 NSNumber 對象(整數(shù))漾抬,正值間距加寬宿亡,負(fù)值間距變窄
* 7. NSStrikethroughStyleAttributeName ->設(shè)置刪除線,取值為 NSNumber 對象(整數(shù))
* 8. NSStrikethroughColorAttributeName ->設(shè)置刪除線顏色纳令,取值為 UIColor 對象挽荠,默認(rèn)值為黑色
* 9. NSUnderlineStyleAttributeName ->設(shè)置下劃線克胳,取值為 NSNumber 對象(整數(shù)),枚舉常量 NSUnderlineStyle中的值圈匆,與刪除線類似
* 10. NSUnderlineColorAttributeName ->設(shè)置下劃線顏色漠另,取值為 UIColor 對象,默認(rèn)值為黑色
* 11. NSStrokeWidthAttributeName ->設(shè)置筆畫寬度(粗細(xì))跃赚,取值為 NSNumber 對象(整數(shù))笆搓,負(fù)值填充效果,正值中空效果
* 12. NSStrokeColorAttributeName ->填充部分顏色纬傲,不是字體顏色满败,取值為 UIColor 對象
* 13. NSShadowAttributeName ->設(shè)置陰影屬性,取值為 NSShadow 對象
* 14. NSTextEffectAttributeName ->設(shè)置文本特殊效果叹括,取值為 NSString 對象算墨,目前只有圖版印刷效果可用
* 15. NSBaselineOffsetAttributeName ->設(shè)置基線偏移值,取值為 NSNumber (float),正值上偏领猾,負(fù)值下偏
* 16. NSObliquenessAttributeName ->設(shè)置字形傾斜度米同,取值為 NSNumber (float),正值右傾,負(fù)值左傾
* 17. NSExpansionAttributeName ->設(shè)置文本橫向拉伸屬性摔竿,取值為 NSNumber (float),正值橫向拉伸文本面粮,負(fù)值橫向壓縮文本
* 18. NSWritingDirectionAttributeName ->設(shè)置文字書寫方向,從左向右書寫或者從右向左書寫
* 19. NSVerticalGlyphFormAttributeName ->設(shè)置文字排版方向继低,取值為 NSNumber 對象(整數(shù))熬苍,0 表示橫排文本,1 表示豎排文本
* 20. NSLinkAttributeName ->設(shè)置鏈接屬性袁翁,點(diǎn)擊后調(diào)用瀏覽器打開指定URL地址
* 21. NSAttachmentAttributeName ->設(shè)置文本附件,取值為NSTextAttachment對象,常用于文字圖片混排
- (void)creatTitleLabel {
self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 320, 400)];
self.titleLabel.numberOfLines = 0;
self.titleLabel.layer.borderColor = [UIColor grayColor].CGColor;
self.titleLabel.layer.borderWidth = 0.5;
self.titleLabel.textAlignment = NSTextAlignmentLeft;
[self.view addSubview:self.titleLabel];
NSString *string = @"An NSAttributedString object manages character strings and associated sets of attributes (for example, font and kerning) that apply to individual characters or ranges of characters in the string. An association of characters and their attributes is called an attributed string. ";
/* 這句話就是對這個類的一個最簡明扼要的概括柴底。NSAttributedString管理一個字符串,以及與該字符串中的單個字符或某些范圍的字符串相關(guān)的屬性粱胜。它有一個子類NSMutableAttributedString
* 具體實現(xiàn)時柄驻,NSAttributedString維護(hù)了一個NSString,用來保存最原始的字符串焙压,另有一個NSDictionary用來保存各個子串/字符的屬性鸿脓。
*/
titleLabel.png
#pragma mark - NSMutableAttributedString 創(chuàng)建
/* 三種初始化方法,NSMutableAttributedString沒有初始化方法,使用父類初始化方法, 使用initWithString:, initWithString:attributes:, 或者 initWithAttributedString: */
NSAttributedString *attStri = [[NSAttributedString alloc] initWithString:string attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:30]}];
NSMutableAttributedString *mAttStri = [[NSMutableAttributedString alloc] initWithString:string];
#pragma mark ** 1. NSFontAttributeName 設(shè)置字體屬性
/* 字體大小 及 字體類型 */
NSRange font_range = [string rangeOfString:@"An"];
[mAttStri addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30] range:font_range];
[mAttStri addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Courier-BoldOblique" size:17.0] range:NSMakeRange(10, 10)];
字體大小 及 字體類型 .png
#pragma mark ** 2. NSParagraphStyleAttributeName 設(shè)置文本段落排版格式
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.firstLineHeadIndent = 20;
style.lineSpacing = 10;
[mAttStri addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, mAttStri.length / 2)];
設(shè)置文本段落排版格式.png
#pragma mark ** 3. NSForegroundColorAttributeName 設(shè)置字體顏色
/* 值為UIColor,字體顏色涯曲,默認(rèn)為黑色. */
[mAttStri addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, mAttStri.length)];
設(shè)置字體顏色.png
#pragma mark ** 4. NSBackgroundColorAttributeName 設(shè)置字體所在區(qū)域背景顏色
/* 值為UIColor野哭,字體背景色,默認(rèn)透明. */
[mAttStri addAttribute:NSBackgroundColorAttributeName value:[UIColor grayColor] range:NSMakeRange(0, 20)];
設(shè)置字體所在區(qū)域背景顏色.png
#pragma mark ** 5. NSLigatureAttributeName 設(shè)置連體屬性
/* 取值為NSNumber 對象(整數(shù)). 0 表示沒有連體字符, 1 表示使用默認(rèn)的連體字符. 一般中文用不到幻件,在英文中可能出現(xiàn)相鄰字母連筆的情況 */
[mAttStri addAttribute:NSLigatureAttributeName value:@0 range:NSMakeRange(0, mAttStri.length)];
#pragma mark ** 6. NSKernAttributeName 設(shè)置字符間距
/* 值為浮點(diǎn)數(shù)NSNumber拨黔,字距屬性,默認(rèn)值為0绰沥。*/
[mAttStri addAttribute:NSKernAttributeName value:@3 range:NSMakeRange(0, mAttStri.length)];
設(shè)置字符間距.png
#pragma mark ** 7. NSStrikethroughStyleAttributeName 設(shè)置刪除線
/* 值為整型NSNumber篱蝇,可取值為(取值大小為刪除線的寬度)
enum {
NSUnderlineStyleNone = 0×00,
NSUnderlineStyleSingle = 0×01,
}; 設(shè)置刪除線贺待。
*/
[mAttStri addAttribute:NSStrikethroughStyleAttributeName value:@3 range:NSMakeRange(3, 7)];
設(shè)置刪除線.png
#pragma mark ** 8. NSStrikethroughColorAttributeName 設(shè)置刪除線顏色
/* 這個屬性的值是一個UIColor對象. */
[mAttStri addAttribute:NSStrikethroughColorAttributeName value:[UIColor blueColor] range:NSMakeRange(3, 3)];
設(shè)置刪除線顏色.png
#pragma mark ** 9. NSUnderlineStyleAttributeName 設(shè)置下劃線
/* 取值為 NSNumber 對象(整數(shù)),枚舉常量 NSUnderlineStyle中的值态兴,與刪除線類似 */
[mAttStri addAttribute:NSUnderlineStyleAttributeName value:@2 range:NSMakeRange(6, 5)];
設(shè)置下劃線.png
#pragma mark ** 10. NSUnderlineColorAttributeName 設(shè)置下劃線顏色
/* 這個屬性的值是一個UIColor對象.默認(rèn)值為nil. */
[mAttStri addAttribute:NSUnderlineColorAttributeName value:[UIColor blackColor] range:NSMakeRange(6, 5)];
設(shè)置下劃線顏色.png
#pragma mark ** 11. NSStrokeWidthAttributeName 設(shè)置筆畫寬度(粗細(xì))
/* 值為浮點(diǎn)數(shù)NSNumber狠持。設(shè)置筆畫的粗細(xì)。負(fù)值填充效果瞻润,正值中空效果. */
[mAttStri addAttribute:NSStrokeWidthAttributeName value:@10 range:NSMakeRange(50, 30)];
設(shè)置筆畫寬度(粗細(xì)).png
#pragma mark ** 12. NSStrokeColorAttributeName 填充部分顏色,
/* 不是字體顏色甜刻,取值為 UIColor 對象 默認(rèn)值為nil绍撞,設(shè)置的屬性同F(xiàn)oregroundColor。*/
[mAttStri addAttribute:NSStrokeColorAttributeName value:[UIColor orangeColor] range:NSMakeRange(50, 20)];
填充部分顏色.png
#pragma mark ** 13. NSShadowAttributeName 設(shè)置陰影屬性
/* 值為NSShadow得院,設(shè)置筆畫的陰影傻铣,默認(rèn)值為nil。*/
NSShadow *shadow = [[NSShadow alloc]init];
shadow.shadowOffset = CGSizeMake(10, 10);
shadow.shadowColor = [UIColor greenColor];
[mAttStri addAttribute:NSShadowAttributeName value:shadow range:NSMakeRange(20, 10)];
設(shè)置陰影屬性.png
#pragma mark ** 14. NSTextEffectAttributeName 設(shè)置文本特殊效果
/* 這個屬性的值是一個NSString對象祥绞。使用此屬性指定的文字效果非洲,如NSTextEffectLetterpressStyle。此屬性的默認(rèn)值為nil蜕径,表示沒有文本效應(yīng)两踏。*/
[mAttStri addAttribute:NSTextEffectAttributeName value:NSTextEffectLetterpressStyle range:NSMakeRange(80, 10)];
設(shè)置文本特殊效果.png
#pragma mark ** 15. NSBaselineOffsetAttributeName 設(shè)置基線偏移值
/* 此屬性的值是包含一個浮點(diǎn)值的NSNumber對象,表示的字符從基線偏移的NSNumber對象,默認(rèn)值是0兜喻。正值上偏梦染,負(fù)值下偏 */
[mAttStri addAttribute:NSBaselineOffsetAttributeName value:@5 range:NSMakeRange(112, 10)];
設(shè)置基線偏移值.png
#pragma mark ** 16. NSObliquenessAttributeName 設(shè)置字形傾斜度取值為 NSNumber (float),正值右傾,負(fù)值左傾
/* 此屬性的值是包含一個浮點(diǎn)值的NSNumber對象朴皆。默認(rèn)值為0帕识,表示沒有傾斜, 正值右傾,負(fù)值左傾遂铡。 */
[mAttStri addAttribute:NSObliquenessAttributeName value:@0.8 range:NSMakeRange(135, 15)];
設(shè)置字形傾斜度取值.png
#pragma mark ** 17. NSExpansionAttributeName 設(shè)置文本橫向拉伸屬性
/* 取值為 NSNumber(float), 正值橫向拉伸文本, 負(fù)值橫向壓縮文本 */
NSRange range = [string rangeOfString:@"An association of"];
[mAttStri addAttribute:NSExpansionAttributeName value:@1.0 range:range];
設(shè)置文本橫向拉伸屬性png
#pragma mark ** 18. NSWritingDirectionAttributeName 設(shè)置文字書寫方向
/**
* 取值為包含NSNumber對象的數(shù)組. 從左向右書寫或者從右向左書寫.
*
* The values of the NSNumber objects should be 0, 1, 2, or 3, for LRE, RLE, LRO, or RLO respectively, and combinations of NSWritingDirectionLeftToRight and NSWritingDirectionRightToLeft with NSTextWritingDirectionEmbedding or NSTextWritingDirectionOverride, as shown in Values of NSWritingDirectionAttributeName and equivalent markup.
*/
NSRange rang2 = [string rangeOfString:@"characters and their"];
[mAttStri addAttribute:NSWritingDirectionAttributeName value:@[@3] range:rang2];
設(shè)置文字書寫方向.png
#pragma mark ** 19. NSVerticalGlyphFormAttributeName 設(shè)置文字排版方向
/**
* 值為整型NSNumber肮疗,0為水平排版的字,1為垂直排版的字扒接。注意,在iOS中, 總是以橫向排版
*
* In iOS, horizontal text is always used and specifying a different value is undefined.
*/
[mAttStri addAttribute:NSVerticalGlyphFormAttributeName value:@1 range:NSMakeRange(1, 10)];
設(shè)置文字排版方向.png
#pragma mark ** 20. NSLinkAttributeName 設(shè)置鏈接屬性
/**
* 此屬性的值是NSURL對象(首選)或一個NSString對象伪货。此屬性的默認(rèn)值為nil,表示沒有鏈接珠增。
* UILabel無法使用該屬性, 可以使用UITextView 控件.
*/
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 450, 320, 60)];
[self.view addSubview:textView];
textView.backgroundColor = [UIColor lightGrayColor];
NSString *strLink = @"百度鏈接";
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:strLink attributes:@{NSLinkAttributeName: [NSURL URLWithString:@"http://www.baidu.com"]}];
textView.editable = NO;
/* 簽訂協(xié)議, 指定代理人之后. 但點(diǎn)擊鏈接時, 會回調(diào)協(xié)議方法 (- textView:shouldInteractWithURL:inRange:) */
textView.delegate = self;
textView.attributedText = attStr;
設(shè)置鏈接屬性.png
#pragma mark ** 21. NSAttachmentAttributeName 設(shè)置文本附件
/* 這個屬性的值是一個NSTextAttachment對象超歌。此屬性的默認(rèn)值為nil,表示無附件蒂教。*/
/**
* 關(guān)于NSTextAttachment類的簡單說明
*
* NSTextAttachment 類有一個指定的初始化方法(- initWithData:ofType:), 需要指定附件文檔的數(shù)據(jù)和附件文件的類型. 如果附件文檔數(shù)據(jù)指定nil, 那么系統(tǒng)將會默認(rèn)指定為image對象作為值. 因此, 也可以通過這個特性實現(xiàn)圖文混排.
* 下面就以附件為image對象來說明NSAttachmentAttributeName的使用.
*
*/
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 550, 320, 60)];
label.backgroundColor = [UIColor yellowColor];
[self.view addSubview:label];
/* 下面實現(xiàn)在百度兩個漢字之間插入一個照片 */
NSString *stiAtt = @"百度";
NSTextAttachment *attach = [[NSTextAttachment alloc] initWithData:nil ofType:nil];
attach.bounds = CGRectMake(0, 0, 50, 50);
attach.image = [UIImage imageNamed:@"baidu.jpg"];
NSAttributedString *strAtt = [NSAttributedString attributedStringWithAttachment:attach];
NSMutableAttributedString *strMatt = [[NSMutableAttributedString alloc] initWithString:stiAtt];
[strMatt insertAttributedString:strAtt atIndex:1];
label.attributedText = strMatt;
self.titleLabel.attributedText = mAttStri;
[self.titleLabel sizeToFit];
}
#pragma mark - textView delegate
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
NSLog(@"%s", __func__);
NSLog(@"url: %@", URL);
return YES;
}
設(shè)置文本附件.png