作品分享
问答交流
发现
任务
客服工单
前言:开发一套自界说心情包需求,雷同于小红书的心情键盘,技能点其着实体系键盘和心情键盘的切换、焦点是富文本的处理处罚,包罗文本转心情([哈哈]=>?)和心情转文本(?=>[哈哈])细节许多,坑大概多,工具类实现文件在末了,文中用到了可以查阅
分析下整个需求点和开发过程: 1、心情包JSON数据格式规范 2、服务端下发心情JSON文件,对于心情库的存取利用 3、页面展示文本转化 4、心情键盘以及键盘切换 5、迩来利用心情逻辑开发 6、键盘上心情点击,长按展示浮窗动图、删除键功能 7、复制粘贴功能(包罗粘贴时长度大于字数限定时截取处理处罚) 8、输入框高度有高度限定时的动态变革逻辑 9、输入框输入大概粘贴的时间,上下抖动问题的处理处罚 10、上传服务器
这里必要注意的是,假如通过 [[NSUserDefaults standardUserDefaults] setInteger:[dictionary[@"emojiVersion"] intValue] forKey:kMomentsEmojiVersion];这种方式当地生存的话,背面跟上[[NSUserDefaults standardUserDefaults] synchronize];如许会实时同步,制止短时间再次哀求接口的时间还没有生存起来,造成不须要的贫困
注意:我们跟服务端是用 [高兴] 情势交互的,我们给服务端也是这种情势,服务端给我们也是这种,心情的展示完满是我们移动端自己处理处罚的逻辑
重点注意:转义成富文本插入的时间实在是一个Unicode码占位符\U0000fffc 是1个长度的字符 也就是说 [高兴] 转 实在是4个字符串长度转成1个字符串长度,以是在转的时间会导致整个文本的长度变的,变的话正则匹配到的range也就对不上了,以是更换的时间要注意是从背面往前面更换 重点注意:大概文本中有个别文案要个性化设置(字体颜色改变等),那么我们先处理处罚完我们的心情转义后再去做那些利用,防止原始字符串被粉碎,转义心情的时间受阻!!! 重点注意:富文本设值,就不要用text了,用attributeString设值。一样平常用的是YYLabel而不用UILabel,UILabel展示不出来。输入框编辑可以用YYTextView
必要注意的是:单独创建一个UIView(下文成为emojiKeyboardView),UICollectionview作为子视图,由于心情键盘上另有一个删除按钮是作为UIView的子视图固定在右下角呢。
注意:self.emojiKeyboardView 心情键盘这个view,高度是自己可以控制的,假如你设置成600那么切换键盘的时间,体系键盘的高度和心情键盘的高度就不一样了,最好是高度和体系键盘的高度一致,那么在切换键盘的时间,顶部的输入框编辑栏就不会上下乱跳,(固然小红书的心情键盘高度是比着体系键盘很低,大概就是固定死高度)不管你体系键盘高度多少(体系键盘和搜狗键盘高度还不一样),心情键盘不绝稳固。如许逻辑上就比力简单, 假如想要做成跟体系键盘高度一样,做法是监听体系键盘弹起和收起的方法,获取到键盘高度,然后赋值给心情键盘 注意注意注意:假如你心情键盘初始化的时间高度设置是300,体系键盘比如说是400,那么在切换键盘的时间,监听的键盘弹起接纳方法中获取的高度也是会变的,也就是说你酿成心情键盘的时间,你这个心情面板view就是键盘,以是要想设置心情面板高度成为体系键盘高度,就要在成为体系键盘的时间纪录下体系键盘的高度,然后在切换的时间,重新设置一下心情面板的高度,这个机会就是体系键盘接纳的时间,这时间我们拿着体系键盘的高度,重新初始化一下我们的emojiKeyboardView,高度设置成体系键盘以后,我们在切换成心情键盘,弹起的时间高度就是准确的高度了。
注意注意注意:键盘上的编辑栏,包管视觉上编辑栏底部挨着键盘顶部就可以了,假如如许的话就要在键盘底部单独再加一个遮罩,笔者这里是直接把编辑栏做成高度是键盘高度+视觉的编辑栏高度(由于在切换键盘的时间键盘接纳弹起过程中,假如下面没有遮罩,编辑栏又要停留在原处的时间,会袒露底部控制器的试图),不管怎么做,在切换键盘的时间不要去掉这个遮罩,等真正终极接纳键盘的时间肯定要注意这个遮罩的处理处罚,要否则就遮罩停留在那边,就成了bug
注意注意注意:有个问题大概会被忽略,就是键盘弹起状态时,假如体系截图,会出现”寻求资助“悬浮按钮,点击这个按钮,再次返来的时间,就会出现键盘接纳了遮罩还在的情况。对于这种键盘非常接纳的情况,办理方法是viewWillAppear中设置[textview becomeFirstResponder]
注意:当点击雷同心情的时间,判重直接通过数组中是否包罗model对象的话,大概会有问题,会鉴别成两个model,以是准确的处理处罚是拿model的唯一标识来判重,如许的话无非是在深一层去判定
注意:由于添加心情的时间是整个富文本更换原来的富文本,此时假如不设置TextView的selectRange那么就有问题,也就是光标会有问题,要设置准确的光标很告急,设置完准确的光标位置,然后[self.tagTextView scrollRangeToVisible:self.tagTextView.selectedRange];利用这句代码可以让输入框不抖动
注意注意注意:键盘添加心情大概字符的时间我们可以通过TextView署理方法来获取长度,判定是否凌驾字数限定,是否可以再添加 粘贴的话,可以通过这个粘贴的方法,算一下字符串长度是否到达最大,多的话,我们也可以截图,通常我们长度是按照转成平常文本([高兴])来算的,以是盘算的时间要注意,假如用心情的字符长度盘算没有凌驾最大字数限定,但是现实上转成平常文本情势已经远远凌驾字数限定就会出现问题
增补:假如TextView是独立的在VC上而不是在键盘顶部,比如发布页页面层级 VC--->UIScrollView--->TextView,大概我们在复制大概剪切的时间,拖动选中地域,跟其他滑动手势会辩论导致划不动,可以如下处理处罚,代码如下:
举报
本版积分规则 回帖后跳转到最后一页
Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )
GMT+8, 2025-8-23 20:13, Processed in 0.213702 second(s), 32 queries.© 2003-2025 cbk Team.