简易使用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(, 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:.f] range:[str range]],
[ConfigAttributedString paragraphStyle:[self style] range:[str range]], // 局部设置
[ConfigAttributedString foregroundColor:[UIColor redColor]
range:[@"未选择的路" rangeFrom:str]],
[ConfigAttributedString font:[UIFont systemFontOfSize:.f]
range:[@"未选择的路" rangeFrom:str]]]; // 初始化富文本
UILabel *label = [[UILabel alloc] initWithFrame:self.view.bounds];
label.numberOfLines = ;
label.attributedText = [str createAttributedStringAndConfig:array];
[self.view addSubview:label];
} // 段落样式
- (NSMutableParagraphStyle *)style
{
NSMutableParagraphStyle *style = [NSMutableParagraphStyle new];
style.lineSpacing = .f;
style.firstLineHeadIndent = .f; return style;
} @end

设计原理:

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

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

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

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

简易使用UILabel的富文本的更多相关文章

  1. UILabel的富文本显示选项

    UILabel的富文本格式设置 1.实例化方法和使用方法 实例化方法: 使用字符串初始化 - (id)initWithString:(NSString *)str; 例: NSMutableAttri ...

  2. UILabel设置富文本后不显示省略号

    先描述一下问题,项目中用到了UILabel去显示一段富文本文字,超过label显示区域部分,省略号处理. 但是当设置好 attributedText 给label之后,显示出的效果是文字被切割了,并没 ...

  3. UILabel设置富文本格式显示

    实例化方法和使用方法 实例化方法: 使用字符串初始化 - (id)initWithString:(NSString *)str; 例: NSMutableAttributedString *Attri ...

  4. UILabel富文本 段落格式以及UILabel添加图片

    之前文本整理有一点乱,这边重新整理一下,下面是效果图,一共两个UILabel, 富文本整理: /*NSForegroundColorAttributeName设置字体颜色,对象UIColor; NSP ...

  5. UILabel添加图片之富文本的简单应用

    若想对UILabel添加图片,那么就需要使用NSMutableAttributedString来定义先定义一个普通的label UILabel *lab = [[UILabel alloc]initW ...

  6. UIlabel - 富文本属性

    1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSFontAttributeName : [UIFont systemFontOfSize:_fontS ...

  7. 简易富文本编辑器bootstrap-wysiwyg源码注释

    好久没写随笔了,因为最近比较忙,小公司基本都是一个前端干所有属于和部分不属于前端的事情,所以就没空弄了,即使想分享,也因为没有时间和精力就搁置了. 这周周六日休息,正好时间比较充裕(ps:目前处在单休 ...

  8. UILabel(富文本)

    本文转载至 http://www.jianshu.com/p/5d24d22f99c3 富文本 NSString *str = @"人生若只如初见,何事秋风悲画扇.\n等闲变却故人心,却道故 ...

  9. iOS UIlabel怎么加载html字符串 富文本的用法

    要加载html字符串,用人说,直接用webView啊!但是,有时候我们只需要显示2行文字,如此少的内容却要在复杂的UI排版中加入一个占用资源较多的webview,得不偿失.这里要说的是,我们其实可以用 ...

随机推荐

  1. neo4j 查询

    match (p: Node {name:"城关镇"}) return p p 代表的是一个变量,Node为插入neo4j时节点类型,name后面加节点的名称

  2. 值得收藏的TCP套接口编程文章

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由jackieluo发表于云+社区专栏 TCP客户端-服务器典型事件 下图是TCP客户端与服务器之间交互的一系列典型事件时间表: 首先启 ...

  3. 小程序之底部tabBar

    用法简介: 1.app.json中配置下tabBar即可,注意tabBar至少需要两个最多五个Item选项 这里简单列举一些属性值:对于tabBar整体属性设置: 对于tabBar中每个Item属性设 ...

  4. 14.Iterator 和 for...of 循环

    Iterator 和 for...of 循环 Iterator 和 for...of 循环 Iterator(遍历器)的概念 JavaScript 原有的表示"集合"的数据结构,主 ...

  5. Shell脚本编写3---Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 执行脚本,查看输出结果: 另外 ...

  6. c#基础学习(0806)之可变参数、ref和out关键字的简单使用

    params可变参数: 1.无论方法有几个参数,可变参数必须出现再参数列表的最后,可以为可变参数直接传递一个对应类型的数组: 2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则数组为一个长度 ...

  7. BG.Hadoop.Master

    1. 安装JDK JDK安装包复制到/opt文件夹 cd /opt rpm -ivh jdk-8u121-linux-x64.rpm vim /etc/profile 增加 JAVA_HOME=/us ...

  8. 单点登录在asp.net中的简单实现

    系统的基本架构 我们假设一个系统System包含Service客户服务中心.Shop网上购物中心和Office网上办公中心三个独立的网站.Service管理客户的资料,登录和注销过程.不论客户访问Sy ...

  9. WPF绑定之索引器值变化通知

    背景 在某些应用中,需要在界面上绑定到索引器,并在值发生变化时实时更新. 解决方案 只要将包含索引器的类实现INotifyPropertyChanged接口,并在索引值更改时引发PropertyCha ...

  10. 网络编程: 基于UDP协议的socket

    udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接 UDP协议的通信优势: 允许一个服务器同时和多个客户端通信, TCP不行 服务端 import socket sk = socket ...