关于输入页面中键盘表情的设置
来源:互联网 发布:淘宝客服需要什么学历 编辑:程序博客网 时间:2024/06/07 02:31
键盘表情的设置:
再插入新的副文本内容时,需保留旧的副文本,因为副文本只能有一个。它会自动保存其内部文本附件的位置。
通过表情包的Plist文件来生成一个三维数组
三维数组保存着总共有几组表情
二维数组保存着一组有几行表情
一维数组保存着每行都有多少个表情
通过计算的页数 * 每页显示的数量 > 总表情数来判断最后一页有多少个表情
如果大于,就减去之前的所有数量,剩下的就是最后一页的数量
通过生成的三维数组来创建CollectionViewController页面,每组的每个Cell上挂着需要显示的按钮
通常最后一个按钮要空出来作为删除按钮
每个按钮都通过枚举值来计算Tag,枚举值可以更直观的知道按钮是哪个类型的,如浪小花
所有按钮都统一设置,所有按钮都有一个点击事件,点击事件执行的方法为同一个方法
每个按钮都有一个属性,属性为表情详细参数,如果此值被设置就让按钮显示,设置按钮内容
通过按钮的表情类型来判断按钮属于哪一种类型,不同类型的表情可能值得设置方式有所不同
如有的按钮图片通过UIImage生成,有的通过字符串
通过字符串的需要引入NSString的延展类,如:NSString+Emoji来生成Emoji图片
设置完按钮的值保存按钮图片的详细参数
按钮点击事件执行的方法为发布一个通知,通知的参数为按钮自身
随后在当前页面的主控制器里接收通知,通过接收到的通知来执行插入副文本的方法
副文本的设置关键点:
1.根据传入的图片路径创建一个UIImage
2.根据生成的UIImage对象创建也给NSTextAttachment(文本附件)
3.根据NSTextAttachment创建一个NSAttributedString(副文本)
4.把我们的副文本设置给我们的UITextView。attributedText
可通过设置文本附件的Bounds来设置表情的偏移量
若加入的表情需要修改副文本,如图片形式:
一个TextView只能有一个副文本文件,但一个副文本文件可以保存多个附件
在插入表情文件时,应保存一下当前选择的范围
若没有选择则范围为0,不妨碍计算,而后应是将选中的范围内的字符串替换
所以通过记录上一次文本,再对记录的文本进行修改,来添加多表情
若加入的表情不需要副文本,如字符串形式:
可通过inseText直接添加
书写与发送的操作可封装UITextView的一个延展类,在延展类里有一个插入方法与一个属性
插入方法为点击表情按钮时通过参数调用,参数为按钮表情的详细信息
通过参数的类型来判断是图片还是字符串
如果是图片就通过以上四部:
通过图片生成UIImage,UIImage转换成文本文件
文本文件转换成表情副文本,在设置给我们的UITextView
而后发布通知,与使用文本修改的textViewDidChange代理方法,方便主控制器调用代理方法
自己使用自己的代理调用代理方法self.delegate?.textViewDidChange?(self)
插入副文本时若想要光标表情的的后面,需手动设置self.selectedRange的location+1并范围为0
若要替换已选择的范围,也需要获取self.selectedRange,而后通过replaceCharactersInRange替换
也就是替换选中的字符串
若为字符串则直接self.InsertText,会自动发布通知与实现代理方法
副文本设置完毕,发送时需要将副文本的表情转成描述
将描述与字符串拼接成一个整体字符串
也就是延展类的属性设置,此属性为字符串
会遍历TextView的所有文本内容,通过self.attributedText.enumerateAttributesInRange(NSMakeRange(0, self.attributedText.length), options: []) { (infoDic, range, _){ }
获取文本框内的数据infoDic与内容范围range
若为表情,则通过数据InfoDic["NSAttachment"] 即可获取
可转换为自书写的NSTextAttachment延展类中的表情详细信息
通过表情详细信息来获取表情描述
若为字符串直接拼接
遍历完后返回拼接好的字符串方便数据传输
对于接收到的表情描述,可通过封装方法转换成本地表情显示
方法需要接收到的所有文本内容,而后通过正则表达式遍历找到表情描述
正则表达式可通过导入第三方框架RegexKitLite(MRC格式)实现
通过将接收到的文本内容转换成字符串再调用enumerateStringsMatchedByRegex方法
第一个参数为正则表达式匹配的值,可百度查询
对于“ [表情描述] ” 而言,可”\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]" 来描述
对于block里的参数:1. 匹配格式,2 匹配到的内容的指针,3匹配到的值的范围,4. 是否停止的指针
通过内容的memory获取所需字符串,范围的memory获取值得范围
找寻到的内容与范围可通过封装类来保存
可将所有的已保存的值保存到一个数组里用来快速修改
通过数组的倒叙遍历,来调用封装的通过字符串查找表情模型来找到表情模型
查询的方法封装就是遍历所有的表情组中的表情的描述,找到返回 找不到返回nil
而后通过找到的表情生成副文本,在替换文本内容的对应位置的对应值
替换方法:replaceCharactersInRange(range, value)
而后将修改好的文本内容进行显示
对于接收到的文本数据,将其中的表情描述转换成表情的关键点:
1.通过正则表达式截取到表情字符串
2.通过表情字符串查找本地表情模型
3.通过表情模型里面的图片生成副文本来代替原文本的副文本
在表情展示界面时,如要设置页面导航
只需声明一个页面导航,并添加到当前ContentView
而后在CollectionView的滚动中与底部button的点击中设置自身的滚动
页面导航的页数为所在组的页数
- 关于输入页面中键盘表情的设置
- Android 在TextView,EditText中添加表情,设置输入键盘消失
- H5页面input输入框含有键盘自带的表情符时显示异常
- 自定义表情输入键盘
- 设置表情键盘视图
- 做了一个简单的Emoji表情输入键盘
- Android: 实现类似QQ、微信的表情输入键盘
- Android: 实现类似QQ、微信的表情输入键盘
- Android: 实现表情输入键盘的另外一种思路
- swift中关于表情键盘,抖动问题处理
- 网友的表情键盘
- html页面在手机中点击输入框调出键盘页面内容上移的粗暴解决办法
- 关于XhsEmoticonsKeyboard仿微信表情键盘,某些情况下输入字符崩溃问题解决办法
- Apache中关于页面缓存的设置
- android 输入键盘遮挡页面的问题
- 仿微信表情输入键盘(支持 Gif 表情图文混排 )
- 输入页面,回收键盘
- Xcode6设置模拟器键盘的中文输入
- 360网站卫士 PHP-DOS攻击脚本专杀工具使用笔记
- hdu 2639Bone Collector II(01背包求第k大)
- nyoj 285 寻找克隆人
- C++的性能优化实践 map hash_map unodered_map性能
- 用Cookie实现web网站您浏览过其他的商品
- 关于输入页面中键盘表情的设置
- [leetcode] 【数组】 89. Gray Code
- Apache与Nginx的区别
- I2C总线原理及应用实例
- Ehcache Memcache Redis 初步 (一)
- 分页关键知识点总结
- Android时间平移以及计算时间差,以及计算工作日
- 《CSS权威指南》学习记录——特殊性和层叠
- 肿瘤检测