iOS正则表达式的使用案例-富文本
富文本(正则表达式)
一.新建工程导入图片
二 实现方式一(缺点是只能解决一个图片的替换)
_myLabel.font = [UIFont systemFontOfSize:15];
//@"家里真没人 "
//正则表达式 [] 是特殊字符
NSString *str = @"女神: s012 家里真没人 s010 202 s018 ";
//特殊文本 加表情
// NSAttributedString *
//1.先创建一个值存放文本的字符串并且填充字符串数据
NSAttributedString *attributedString = [[NSAttributedString alloc]initWithString:str];
//2.创建一个带图片的附件对象
LHQTextAttachment *attachment = [[LHQTextAttachment alloc]init];
//给附件对象增加一个image
attachment.image = [UIImage imageNamed:@"s014.png"];
//3.在创建一个可以存放待图片文本的
NSAttributedString *strImage = [NSAttributedString attributedStringWithAttachment:attachment];
//4.可变属性字符串拼接普通文本和附件文本
NSMutableAttributedString *mAttributedString = [[NSMutableAttributedString alloc]initWithAttributedString:attributedString];
// [mAttributedString appendAttributedString:attributedString];
//扫描位置 s012//定一个规则
NSString *pattern = @"[s][0-9]{3}";
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
NSTextCheckingResult *result = [regular firstMatchInString:str options:1 range:NSMakeRange(0, str.length)];
// result.range =
[mAttributedString replaceCharactersInRange:result.range withAttributedString:strImage];
_myLabel.attributedText = mAttributedString;
实现方式二:
导入分类
#import "NSAttributedString+Emoji.h"
- (void)viewDidLoad {
[super viewDidLoad];
// _myLabel.font = [UIFont systemFontOfSize:15];
//@"家里真没人 "
//正则表达式 [] 是特殊字符
NSString *str = @"女神: s012 家里真没人 s010 202 s018 ";
NSMutableAttributedString *mAttributedStr = [[NSMutableAttributedString alloc]initWithString:str];
NSAttributedString *attrobutedStr = [NSAttributedString emojiStringWithString:mAttributedStr];
_myLabel.attributedText = attrobutedStr;
}
实现的效果:
附件: 分类的代码
.h:
//
// NSAttributedString+Emoji.h
// MiYa
//
// Created by 李洪强 on 17/07/06.
// Copyright (c) 2017年 . All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSAttributedString (Emoji)
+ (NSAttributedString *)emojiStringWithString:(NSMutableAttributedString *)emojiString;
@end
--------------------------------------------------------------------------------------
.m:
//
// NSAttributedString+Emoji.m
// MiYa
//
// Created by 李洪强 on 17/07/06.
// Copyright (c) 2017年 . All rights reserved.
//
#import "NSAttributedString+Emoji.h"
#import <UIKit/UIKit.h>
@interface EmojiAttachment : NSTextAttachment
@end
@implementation EmojiAttachment
//I want my emoticon has the same size with line's height
- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex
{
return CGRectMake( 0 , -3, lineFrag.size.height, lineFrag.size.height);
}
@end
@implementation NSAttributedString (Emoji)
+ (NSAttributedString *)emojiStringWithString:(NSMutableAttributedString *)emojiString
{
NSRegularExpression *regularEx = [NSRegularExpression regularExpressionWithPattern:@"s[0-9]{3}" options:NSRegularExpressionCaseInsensitive error:nil];
NSString *string = emojiString.string;
NSTextCheckingResult *result = [regularEx firstMatchInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, string.length)];
if (result != nil) {
NSString *imageName = [NSString stringWithFormat:@"%@.png", [string substringWithRange:result.range]];
EmojiAttachment *attachment = [[EmojiAttachment alloc] initWithData:nil ofType:nil];
attachment.image = [UIImage imageNamed:imageName];
NSAttributedString *attrString = [NSAttributedString attributedStringWithAttachment:attachment];
[emojiString replaceCharactersInRange:result.range withAttributedString:attrString];
// 递归
[self emojiStringWithString:emojiString];
} else {
return emojiString;
}
return emojiString;
}
@end
李洪强 2017 07 06于北京
iOS正则表达式的使用案例-富文本的更多相关文章
- iOS - UILabel添加图片之富文本的简单应用
//创建富文本 NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:@" ...
- iOS开发--使用NSMutableAttributedString 实现富文本
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...
- [iOS] 利用 NSAttributedString 进行富文本处理
/iOS /[iOS] 利用 NSAttributedString 进行富文本处理 2016年4月4日 刘小龙 iOS 许多时候我们需要以各种灵活的形式展现文本信息,即富文本.普通的 text 属性显 ...
- iOS - NSMutableAttributedString富文本的实现
NSMutableAttributedString继承于NSAttributedString(带属性的字符串)能够简单快速实现富文本的效果;不多说直接上效果图和代码,通俗易懂: (一)效果图: (二) ...
- 【改】iOS学习之NSAttributedString(富文本)
NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...
- iOS富文本
背景:前些天突然想做一个笔记本功能,一开始,觉得挺简单的呀,一个UITextView,网络缓存也不干了,直接本地NSUserDefault存储,然后完事了,美工,弄几张好看的图片,加几个动画,也就这样 ...
- iOS - 富文本AttributedString
最近项目中用到了图文混排,所以就研究了一下iOS中的富文本,打算把研究的结果分享一下,也是对自己学习的一个总结. 在iOS中或者Mac OS X中怎样才能将一个字符串绘制到屏幕上呢? ...
- iOS之富文本
之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查 ...
- 【转】iOS使用NSMutableAttributedString实现富文本
iOS使用NSMutableAttributedString实现富文本 在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘 ...
随机推荐
- thunderbird中如何设置QQ邮箱
thunderbird和其他客户端设置是类似的. 我们发现您尝试设置POP3/SMTP服务,但设置未成功. 您可以检查以下的细节来解决: 您是否在邮箱中开启了这项服务,如果尚未开启,请您在[邮箱设置 ...
- JavaScript Window History 浏览器的历史
window.history 对象在编写时可不使用 window 这个前缀. 为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制. 一些方法: history.back() - 与 ...
- Xcode 常用调试技巧总结
NSLog,po命令和普通断点调试相信每个iOS开发者都会,这里就不作介绍了. 一.Memory Graph Xcode8新增:Memory Graph解决闭包引用循环问题 有很多叹号说明就有问题了. ...
- 转:Spring Cache抽象详解
缓存简介 缓存,我的理解是:让数据更接近于使用者:工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存):缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/I ...
- Linux主要shell命令详解(上)
[摘自网络] kill -9 -1即实现用kill命令退出系统 Linux主要shell命令详解 [上篇] shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的 ...
- 神文章2:文本矩阵简述 V1.0 -vivo神人
评论: 牛逼的业余书籍爱好者读书思路,指导思想. 2013/9/22 文本矩阵简述 V1.0http://www.douban.com/note/170688812/ 文/vivo ...
- Ubuntu菜鸟入门(十一)—— windows 和 ubuntu时间冲突解决
一.问题原由 Ubuntu和Windows默认的时间管理方式不同,所以双系统发生时间错乱是正常的 Ubuntu默认时间是把BIOS时间当成GMT+0时间,也就是世界标准时,而我国在东八区(GMT+8) ...
- MongoDB学习笔记(3)--删除数据库
MongoDB 删除数据库 语法 MongoDB 删除数据库的语法格式如下: db.dropDatabase() 删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名. 实例 以下 ...
- 跟我学SharePoint 2013视频培训课程——什么是SharePoint 2013(1)
课程简介 第一天,介绍什么是SharePoint 2013. 视频 SharePoint 2013 交流群 41032413
- FileZilla FTP 登录 问题
1.一直报错220 (vsFTPd 3.0.2)-AUTH TLS 将加密方式选择为 “只是用普通FTP(不安全)”模式即可 2.服务器发回了不可路由的地址 “传输设置”,传输模式设置为主动.