博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[代码] 类似 YYText 将表情文本转换成表情字符
阅读量:5013 次
发布时间:2019-06-12

本文共 2148 字,大约阅读时间需要 7 分钟。

一,经历

1> 由于工作需要,得把 UITextView 中的属性文本转换成普通文字,并将处理后的普通文字转换成属性文本.

2> 将属性文本转换成普通文字简单,可以调用属性文本的enumerateAttribute:inRange:options:usingBlock:方法.

3> 如何将普通文字中的表情符号[:xx]转换成显示的表情呢?这是一个很麻烦的过程,先贴上我研究了三四个小时的代码.

1 -(NSMutableAttributedString *)EmojiTextInTextView:(NSString*)text 2 { 3     NSMutableAttributedString *emojiText = [[NSMutableAttributedString alloc]initWithString:text]; 4         NSArray *keys = [self.emojiManager.dictAllEmoji allKeys]; 5      6         // 若存在[:就遍历所有的表情 7         do { 8             BOOL bFindEmoji = NO; 9             for (id key in keys) {10                 // 有表情11                 if ([text rangeOfString:key].location != NSNotFound) {12                     bFindEmoji = YES;13                     // 模拟属性字符串,使用普通文本占领表情位置,方便确定表情位置14                     NSRange range = [text rangeOfString:key];15                     text = [text stringByReplacingCharactersInRange:range withString:@"1"];16                     17                     // 转换成表情图片18                     UIImage *img = self.emojiManager.dictAllEmoji[key];19                     EmojiTextAttachment *attach = [[EmojiTextAttachment alloc]initWithData:nil ofType:nil];20                     if(img) attach.image = img;21                     attach.emojiTag = key;22                     NSAttributedString *replaceAttri = [NSAttributedString attributedStringWithAttachment:attach];23                     [emojiText replaceCharactersInRange:range withAttributedString:replaceAttri];24                     if ([text rangeOfString:@"[:"].location == NSNotFound){25                         break;26                     }27                 }28             }29             // 若没有查找到一个表情,就退出30             if (bFindEmoji == NO) {31                 break;32             } else {33                 bFindEmoji = NO;34             }35         }while ([text rangeOfString:@"[:"].location != NSNotFound);36     return emojiText;37 }

 

4> 一开始没想到用双层循环,但是单层循环只会遍历一次表情字符串,如果文本中有多个表情字符串,就会漏掉,因此必须使用双层循环,外层用找到[:作为循环终止条件,内层用没有[:作为跳出跳出条件.

5> 后来漏掉了包含[:但是不是表情字符串的情况,因此我就需要加一个 bool 变量,当遍历一次所有表情字符串,没有找到就让该变量置为 NO, 然后跳出第二层循环,排除有[:但是没有表情包的情况.

转载于:https://www.cnblogs.com/lz465350/p/5311777.html

你可能感兴趣的文章
解析$.grep()源码及透过$.grep()看(两次取反)!!的作用
查看>>
[模板] 字符串hash
查看>>
SGU438_The Glorious Karlutka River =)
查看>>
Linux集群及LVS简介
查看>>
简单几何(直线与圆的交点) ZOJ Collision 3728
查看>>
Codeforces Round #327 (Div. 2)
查看>>
如何解决Provisional headers are shown问题(转)
查看>>
开发网站遇到的bug
查看>>
实现简单的接口自动化测试平台
查看>>
EXCEL工作表合并
查看>>
Prime Path
查看>>
ODAC(V9.5.15) 学习笔记(三)TOraSession(2)
查看>>
单纯形法
查看>>
SQL中的replace函数
查看>>
java中的类型安全问题-Type safety: Unchecked cast from Object to ...
查看>>
如何解决最后一个尾注引用显示与致谢混为一谈的问题-下
查看>>
Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...
查看>>
阅读之https及加密原理
查看>>
HDOJ4550 卡片游戏 随便销毁内存的代价就是wa//string类的一些用法
查看>>
css文本样式text、字体样式font
查看>>