需求说明 就是将文字转换成 表情
- 服务端可能给的数据形式
<img src="https://img.kkbuluo.net/images/emojis/hongdan.png" alt="hongdan" class="face"/>
转换成表情
2.上个控制器带入的数据形式
(这个本应该是发到服务端的数据形式)但是要带入下个控制器直接形成表情
<emotion image_name="hongdan.png" image_alt="hongdan">hongdan</emotion>
方法说明
利用正则检索 然后做替换 方法简单 写一段正确的正则表达式(我对于正则语法 还没有完全掌握)就只能讲讲demo 中的正则的意思了
如: @"<(img|IMG)(.*?)(/>|></img>|>)"
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<(img|IMG)(.*?)(/>|></img>|>)" options:NSRegularExpressionAllowCommentsAndWhitespace error:nil];
/**
<(img|IMG)(.*?)(/>|></img>|>)
解释: < 开始 img 或 IMG 后面跟很多的单字符 ? 改变 限定符的贪婪 以 /> 或 ></img> 或 > 结尾 的一个正则表达式
创建正则表达式对象
pattern 模式正则匹配模式
options 正则匹配选项
*/
接着就是字符串的 截取 什么的 获得我需要的 字符串 如 "hongdan" 做了一个字典 保持 再放入数组中 返回
开始操作可变字符串中的数据 吧 字典中的 src 取出 其实是和表情图片资源中有的图片的名字(scr.png) 获得image 在转出成 emoji 在转出 成 可变字符串
EmojiTextAttachment *attachment = ({
EmojiTextAttachment *attachment = [EmojiTextAttachment new];
attachment.image = image;
attachment.emojiName = imageName;
attachment.emojiTag = [NSString stringWithFormat:@"<emotion image_name=\"%@\" image_alt=\"%@\">%@</emotion>",[NSString stringWithFormat:@"%@.png",imageName],imageName,imageName];
attachment.emojiSize = 20;
attachment;
});
//将emoj转换成可变字符串
NSAttributedString *imageAttrString = [NSAttributedString attributedStringWithAttachment:attachment];
这个很重要 因为里面 存储了 这个检索到的字符串在原文中的 范围 (range)根据这个开始做 字符串的替换了
totalLengthChanged 这个是用来记录少了多少的字符串长度 这样才能 在 第二次循环中 找到 第二次需要替换的字符串的位置。 NSUInteger lengthChanged = range.length - 1; 因为加入的表情算 1 所以少了的长度是 字符串长度 - 1. 替换完成 后显示
NSTextCheckingResult *item = dict[@"item"];
NSRange range = [item range];
因为两个控制器中的方法是类似的所以不做重复 如果要看 不一样的界面 就请切换 storyboard
1.png这个是怎么把 main.story 中加入的一个控制器 包装成另一个 story 选中新的控制器 refactor 重新命名
2.png
加上这个 才能 成为 根控制器
3.png
在storyboard 的控制器上直接加一个 导航控制器的方法
关联一个导航栏或标签栏.png
网友评论