zl程序教程

您现在的位置是:首页 >  其它

当前栏目

简易使用UILabel的富文本

文本 简易 使用 UILabel
2023-09-14 08:57:17 时间

简易使用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;

@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 ()

@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即完成了富文本的操作

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