首页 > 代码库 > 简易使用UILabel的富文本

简易使用UILabel的富文本

简易使用UILabel的富文本

 

使用效果:

源码:

NSString+YX.h    NSString+YX.m

////  NSString+YX.h//  YXKit////  Copyright (c) 2014年 Y.X. All rights reserved.//#import <Foundation/Foundation.h>#import "ConfigAttributedString.h"@interface NSString (YX)// 创建富文本并配置富文本(NSArray中的数据必须是ConfigAttributedString对象合集)- (NSMutableAttributedString *)createAttributedStringAndConfig:(NSArray *)configs;// 用于搜寻一段字符串在另外一段字符串中的NSRange值- (NSRange)rangeFrom:(NSString *)string;// 本字符串的range- (NSRange)range;@end
////  NSString+YX.m//  YXKit////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "NSString+YX.h"@implementation NSString (YX)- (NSMutableAttributedString *)createAttributedStringAndConfig:(NSArray *)configs{    NSMutableAttributedString *attributedString =     [[NSMutableAttributedString alloc] initWithString:self];        [configs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {        ConfigAttributedString *oneConfig = obj;        [attributedString addAttribute:oneConfig.attribute                                 value:oneConfig.value                                 range:oneConfig.range];    }];        return attributedString;}- (NSRange)rangeFrom:(NSString *)string{    return [string rangeOfString:self];}- (NSRange)range{    return NSMakeRange(0, self.length);}@end

ConfigAttributedString.h   ConfigAttributedString.m

////  ConfigAttributedString.h//  NSMutableAttributedString////  Copyright (c) 2014年 Y.X. All rights reserved.//#import <Foundation/Foundation.h>@interface ConfigAttributedString : NSObject@property (nonatomic, strong, readonly) NSString *attribute; // 富文本属性@property (nonatomic, strong, readonly) id        value;     // 富文本值@property (nonatomic, assign, readonly) NSRange   range;     // 富文本范围值// 通用型配置+ (instancetype)attribute:(NSString *)attribute                    value:(id)value                    range:(NSRange)range;// 配置字体+ (instancetype)font:(UIFont *)font               range:(NSRange)range;// 配置字体颜色+ (instancetype)foregroundColor:(UIColor *)color                          range:(NSRange)range;// 配置字体背景颜色+ (instancetype)backgroundColor:(UIColor *)color                          range:(NSRange)range;// 字体描边颜色以及描边宽度以及阴影(以下两个方法可以一起使用)+ (instancetype)strokeColor:(UIColor *)color                      range:(NSRange)range;+ (instancetype)strokeWidth:(float)number                      range:(NSRange)range;+ (instancetype)shadow:(NSShadow *)shadow                 range:(NSRange)range;// 配置文字的中划线+ (instancetype)strikethroughStyle:(NSInteger)number                             range:(NSRange)range;// 配置文字的下划线+ (instancetype)underlineStyle:(NSInteger)number                         range:(NSRange)range;// 字间距+ (instancetype)kern:(float)number               range:(NSRange)range;// 段落样式(需要将UILabel中的numberOfLines设置成0才有用)+ (instancetype)paragraphStyle:(NSMutableParagraphStyle *)style                         range:(NSRange)range;@end
////  ConfigAttributedString.m//  NSMutableAttributedString////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "ConfigAttributedString.h"@interface ConfigAttributedString ()@property (nonatomic, strong) NSString *attribute;@property (nonatomic, strong) id        value;@property (nonatomic, assign) NSRange   range;@end@implementation ConfigAttributedString+ (instancetype)attribute:(NSString *)attribute value:(id)value range:(NSRange)range{    ConfigAttributedString *config = [self new];        config.attribute = attribute;    config.value     = value;    config.range     = range;        return config;}+ (instancetype)font:(UIFont *)font range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSFontAttributeName;    config.value     = font;    config.range     = range;        return config;}+ (instancetype)foregroundColor:(UIColor *)color range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSForegroundColorAttributeName;    config.value     = color;    config.range     = range;        return config;}+ (instancetype)backgroundColor:(UIColor *)color range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSBackgroundColorAttributeName;    config.value     = color;    config.range     = range;        return config;}+ (instancetype)strikethroughStyle:(NSInteger)number range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSStrikethroughStyleAttributeName;    config.value     = [NSNumber numberWithInteger:number];    config.range     = range;        return config;}+ (instancetype)paragraphStyle:(NSMutableParagraphStyle *)style range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSParagraphStyleAttributeName;    config.value     = style;    config.range     = range;        return config;}+ (instancetype)kern:(float)number range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSKernAttributeName;    config.value     = [NSNumber numberWithFloat:number];    config.range     = range;        return config;}+ (instancetype)underlineStyle:(NSInteger)number range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSUnderlineStyleAttributeName;    config.value     = [NSNumber numberWithInteger:number];    config.range     = range;        return config;}+ (instancetype)strokeColor:(UIColor *)color range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSStrokeColorAttributeName;    config.value     = color;    config.range     = range;        return config;}+ (instancetype)strokeWidth:(float)number range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSStrokeWidthAttributeName;    config.value     = [NSNumber numberWithFloat:number];    config.range     = range;        return config;}+ (instancetype)shadow:(NSShadow *)shadow range:(NSRange)range{    ConfigAttributedString *config = [self new];    config.attribute = NSShadowAttributeName;    config.value     = shadow;    config.range     = range;        return config;}@end

控制器源码:

////  RootViewController.m//  RichText////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "RootViewController.h"#import "NSString+YX.h"@interface RootViewController ()@end@implementation RootViewController- (void)viewDidLoad{    [super viewDidLoad];        // 字符串    NSString *str = @"未选择的路-弗罗斯特\n黄色的树林里分出两条路,\n可惜我不能同时去涉足,\n我在那路口久久伫立,\n我向着一条路极目望去,\n直到它消失在丛林深处。\n但我却选了另外一条路,\n它荒草萋萋,十分幽寂,\n显得更诱人、更美丽,\n虽然在这两条小路上,\n都很少留下旅人的足迹,\n虽然那天清晨落叶满地,\n两条路都未经脚印污染。\n啊,留下一条路等改日再见!\n但我知道路径延绵无尽头,\n恐怕我难以再回返。\n也许多少年后在某个地方,\n我将轻声叹息把往事回顾,\n一片树林里分出两条路,\n而我选了人迹更少的一条,\n从此决定了我一生的道路。";        // 设置组    NSArray *array =     @[// 全局设置      [ConfigAttributedString font:[UIFont systemFontOfSize:10.f] range:[str range]],      [ConfigAttributedString paragraphStyle:[self style]         range:[str range]],            // 局部设置      [ConfigAttributedString foregroundColor:[UIColor redColor]                                        range:[@"未选择的路" rangeFrom:str]],      [ConfigAttributedString font:[UIFont systemFontOfSize:20.f]                             range:[@"未选择的路" rangeFrom:str]]];        // 初始化富文本    UILabel *label       = [[UILabel alloc] initWithFrame:self.view.bounds];    label.numberOfLines  = 0;    label.attributedText = [str createAttributedStringAndConfig:array];    [self.view addSubview:label];}// 段落样式- (NSMutableParagraphStyle *)style{    NSMutableParagraphStyle *style = [NSMutableParagraphStyle new];    style.lineSpacing              = 10.f;    style.firstLineHeadIndent      = 10.f;        return style;}@end

设计原理:

我把配置抽象成了一个对象,一个对象可能对应着不同的配置,这样写起来就不会乱

使用的时候直接就在数组中配置

通过NSString的Category直接生成富文本赋值给attributedText即完成了富文本的操作

这才叫面向对象编程嘛:)