富文本(正则表达式)

一.新建工程导入图片

二 实现方式一(缺点是只能解决一个图片的替换)

_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正则表达式的使用案例-富文本的更多相关文章

  1. iOS - UILabel添加图片之富文本的简单应用

    //创建富文本 NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:@" ...

  2. iOS开发--使用NSMutableAttributedString 实现富文本

    在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...

  3. [iOS] 利用 NSAttributedString 进行富文本处理

    /iOS /[iOS] 利用 NSAttributedString 进行富文本处理 2016年4月4日 刘小龙 iOS 许多时候我们需要以各种灵活的形式展现文本信息,即富文本.普通的 text 属性显 ...

  4. iOS - NSMutableAttributedString富文本的实现

    NSMutableAttributedString继承于NSAttributedString(带属性的字符串)能够简单快速实现富文本的效果;不多说直接上效果图和代码,通俗易懂: (一)效果图: (二) ...

  5. 【改】iOS学习之NSAttributedString(富文本)

    NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...

  6. iOS富文本

    背景:前些天突然想做一个笔记本功能,一开始,觉得挺简单的呀,一个UITextView,网络缓存也不干了,直接本地NSUserDefault存储,然后完事了,美工,弄几张好看的图片,加几个动画,也就这样 ...

  7. iOS - 富文本AttributedString

    最近项目中用到了图文混排,所以就研究了一下iOS中的富文本,打算把研究的结果分享一下,也是对自己学习的一个总结. 在iOS中或者Mac OS X中怎样才能将一个字符串绘制到屏幕上呢?         ...

  8. iOS之富文本

    之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查 ...

  9. 【转】iOS使用NSMutableAttributedString实现富文本

    iOS使用NSMutableAttributedString实现富文本 在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘 ...

随机推荐

  1. android使用GestureDetector实现手势下滑关闭页面的效果。

    实现类似Android风云直播手机端注册登录页,当手势向下滑动的时候,关闭页面的效果. 使用GestureDetector来实现这个效果,当手势在屏幕上面滑动的时候 ,会掉用onFling方法,所以, ...

  2. [转]GAN论文集

    really-awesome-gan A list of papers and other resources on General Adversarial (Neural) Networks. Th ...

  3. NSOperation, NSOperationQueue 原理探析

    通过GNUstep的Foundation来尝试探索下NSOperation,NSOperationQueue 示例程序 写一个简单的程序 - (void)viewDidLoad { [super vi ...

  4. lsof命令详解(转)

    lsof命令详解(转) 上一篇 / 下一篇  2011-06-09 21:56:41 / 个人分类:Linux 查看( 351 ) / 评论( 0 ) / 评分( 0 / 0 ) 在Linux中,ls ...

  5. 关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明

    关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明 1. mod_evasive 介绍: mod_evasive 是Apache(httpd)服务器的防DDOS的一个 ...

  6. cobbler启动问题

    [root@localhost ~]# cobblerTraceback (most recent call last): File "/usr/bin/cobbler", lin ...

  7. 九款命令行工具助力Linux环境下的数据分析

    对于大多数熟悉了图形工作环境的朋友来说,电子表格工具无疑是第一选项.但命令行工具同样能够更快更高效地解决问题——且只须稍微学习即可上手. 大部分此类工具冻严格局限于Linux,而多数可同样运行在Uni ...

  8. HDU 2492 Ping pong (数状数组)

    Ping pong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  9. 解决UEditor将div标签换成p标签的问题

    原文链接 将设计排版好的页面html代码上传到数据库,再读取出来的时候发现所有的div都被替换成了p标签. 解决方法: 首先在ueditor.all.js文件内搜索allowDivTransToP,找 ...

  10. 【C语言】为什么指明数组的列数?

    首先,我们拿二维数组为例.二维数组称为矩阵.二维数组在概念上是二维的,但实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的.如果将二维数组作为参数传递给函数,那么在函数的参数声明中必 ...