- (instancetype)initWithString:(NSString *)str;
- (instancetype)initWithString:(NSString *)str attributes:(nullable NSDictionary<NSString *, id> *)attrs;
- (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
- (void)addAttributes:(NSDictionary<NSString *, id> *)attrs range:(NSRange)range;
- (void)setAttributes:(nullable NSDictionary<NSString *, id> *)attrs
range:(NSRange)range;
- (void)removeAttribute:(NSString *)name range:(NSRange)range;
- (void)replaceCharactersInRange:(NSRange)range withAttributedString: (NSAttributedString *)attrString;
- (void)insertAttributedString:(NSAttributedString *)attrString atIndex:(NSUInteger)loc;
- (void)appendAttributedString:(NSAttributedString *)attrString;
- (void)deleteCharactersInRange:(NSRange)range;
- (void)setAttributedString:(NSAttributedString *)attrString;
通过API我们可以知道,对于富文本来说添加单个属性和添加属性字典称为其核心方法,就是一个key对应一个Value,只要能了解各种属性所对应效果就可以随意组合,搞出适合各种需求的封装API。
常用需求封装
Demo讲解:
case 1:
{
//单纯改变几个字的颜色样式
_textLabel.attributedText = [AttributedStringTool ls_changeCorlorWithColor:[UIColor redColor] TotalString:@"生活如酒,或芳香,或浓烈,因为诚实,它变得醇厚;生活如歌,或高昂,或低沉,因为守信,它变得悦耳; 生活如画,或明丽,或素雅,因为诚信,它变得美丽。" SubStringArray:@[@"生活",@"或",@"因为"]];
}
break;
case 2:
{
//单纯改变字间距样式
_textLabel.attributedText = [AttributedStringTool ls_changeSpaceWithTotalString:@"用心聆听,深深呼吸,烟花雨,梨花月,寄一缕风的香魂,远离喧嚣。" Space:10.0];
}
break;
case 3:
{
//单纯改变行间距样式
_textLabel.attributedText = [AttributedStringTool ls_changeLineSpaceWithTotalString:@"一些过去,记住就好;一些回忆,收好安放,流年清浅,我只愿面朝大海春暖花开。" LineSpace:12.0];
}
break;
case 4:
{
//改变某些字颜色,并单独设置其字体大小
_textLabel.attributedText = [AttributedStringTool ls_changeFontAndColor:[UIFont systemFontOfSize:20] Color:[UIColor redColor] TotalString:@"微风乍起,迎来层层涟漪,然后又恢复最初的平静。看着荷叶下的净水,心也跟着平静。暂时会忘掉一切骚动不安,就像涟漪过后终归平静一样。" SubStringArray:@[@"平静",@"涟漪",@"微风"]];
}
break;
case 5:
{
//同时改变行间距和字间距 行间距10,字间距5
_textLabel.attributedText = [AttributedStringTool ls_changeLineAndTextSpaceWithTotalString:@"静静的,学会了一颗心去聆听,去欣赏。就如同那一湖秋水,淡淡的几许波纹,却能承载千年的日月,揽尽万里的浮云。" LineSpace:10.0 textSpace:5.0];
}
break;
case 6:
{
//将文字改为链接形式
_textLabel.attributedText = [AttributedStringTool ls_addLinkWithTotalString:@"百度www.baidu.com" SubStringArray:@[@"百度www.baidu.com"]];
}
break;
/** * 单纯改变一句话中的某些字的颜色 * * @param color 需要改变成的颜色 * @param totalStr 总的字符串 * @param subArray 需要改变颜色的文字数组 * * @return 生成的富文本 */
+ (NSMutableAttributedString *)ls_changeCorlorWithColor:(UIColor *)color TotalString:(NSString *)totalStr
SubStringArray:(NSArray *)subArray {
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalStr];
for (NSString *rangeStr in subArray) {
NSRange range = [totalStr rangeOfString:rangeStr options:NSBackwardsSearch];
[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
}
return attributedStr;
}
/** * 单纯改变句子的字间距(需要 <CoreText/CoreText.h>) * * @param totalString 需要更改的字符串 * @param space 字间距 * * @return 生成的富文本 */
+ (NSMutableAttributedString *)ls_changeSpaceWithTotalString:(NSString *)totalString Space:(CGFloat)space {
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
long number = space;
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
[attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])];
CFRelease(num);
return attributedStr;
}
/** * 单纯改变段落的行间距 * * @param totalString 需要更改的字符串 * @param lineSpace 行间距 * * @return 生成的富文本 */
+ (NSMutableAttributedString *)ls_changeLineSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace {
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:lineSpace];
[attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])];
return attributedStr;
}
/** * 同时更改行间距和字间距 * * @param totalString 需要改变的字符串 * @param lineSpace 行间距 * @param textSpace 字间距 * * @return 生成的富文本 */
+ (NSMutableAttributedString *)ls_changeLineAndTextSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace
textSpace:(CGFloat)textSpace {
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:lineSpace];
[attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])];
long number = textSpace;
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
[attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])];
CFRelease(num);
return attributedStr;
}
/** * 改变某些文字的颜色 并单独设置其字体 * * @param font 设置的字体 * @param color 颜色 * @param totalString 总的字符串 * @param subArray 想要变色的字符数组 * * @return 生成的富文本 */
+ (NSMutableAttributedString *)ls_changeFontAndColor:(UIFont *)font Color:(UIColor *)color TotalString:(NSString *)totalString
SubStringArray:(NSArray *)subArray {
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
for (NSString *rangeStr in subArray) {
NSRange range = [totalString rangeOfString:rangeStr options:NSBackwardsSearch];
[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
[attributedStr addAttribute:NSFontAttributeName value:font range:range];
}
return attributedStr;
}
效果图:
源码下载:http://download.csdn.net/detail/hbblzjy/9585735