自定义聊天表情键盘(swift版本)

最近公司没事,自己写了个自定义聊天表情键盘,功能简单,零污染,导入就可以用。右边是github地址(demo源码),喜欢的话给个star,不喜欢可以帮助我修改下(qq.1739002833),谢谢啦~

效果如下:

基本的效果就是表情键盘布局,表情数据的接入,表情插入输入框,图文混排,添加最近常用表情,右下角删除按钮删除输入框内容,右上角发送按钮将文本内容发送给服务器。


基本效果展示
发送服务器输入框文本


最近表情模块

实现逻辑和注意点:

1.界面布局:

在主控制器的view中添加一个Textview,然后自定义一个控制器,将自定义控制器的view作为textview的inputview。在inputview上加了一个UICollectionView和Toolbar.

2数据结构:

用的新浪的表情plist。emoticons.plist中存储了3个表情数组(默认,浪小花,emoji)的id(映射每个表情数组文件夹的名字),每个表情数组文件夹都有对应一个plist,存储着每组表情的属性。

3几个坑和使用:

cell的点击事件异常,粗心的写错了UICollectionViewCell的代理点击方法(在上一篇简书详细说明了)

图文混排时,设置附件(图片)的大小,但是发现了emoji在图片后面时,尺寸不对,原因是属性字符串有默认的尺寸。解决方法是手动设置了属性字符串的尺寸。当在主控制器中动态设置属性字符串的尺寸(textview的尺寸)时,表情越来越大,解决方法是在继承textview和继承NSTextAttachment的子类中动态设置

最近模块的逻辑是,最新一次点击放在最前面,然后对后面的表情排序,点击次数越多的越靠前

本来是用loadPackages()加载所有数据,最后调试发现这个方法没必要调用多次,就写了个单例,防止多次调用,浪费性能

使用的时候直接在控制器里设置iputview就好了,还有一个发送文本给服务器的按钮,写发给服务器的逻辑就好,获取文本已经写好了,基本是零污染,直接用就好了。

第一次写简书,多多交流啊~

推荐阅读更多精彩内容

  • 2017.02.22 可以练习,每当这个时候,脑袋就犯困,我这脑袋真是神奇呀,一说让你做事情,你就犯困,你可不要太...
    Carden阅读 692评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 158,415评论 24 688
  • 项目中有时候会用到表情键盘的使用,下面我就来写一下我所知道的简单实现. 第一步 ----------> 获取本...
    0271fb6f797c阅读 314评论 0 1
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    挣奶粉的打工人阅读 17,489评论 8 172
  • 朋友对我说,她被男友甩了。 我问:“怎么回事?” 她说,“他嫌弃我不够优秀” “你怎么不优秀了?” “要人有人,要...
    昕语心愿阅读 340评论 2 1