之前走了很多弯路,包括自己定以emoji表情,自己创建view类去处理图文混排 ,当把这些焦头烂额的东西处理完了才发现 ,其实系统自带键盘是如此的方便,iOS 系统自带的表情在view,textfield,UIimageView展示时已经将uicode做过处理,直接展示成图片的形式,其实质依然是UTF8的 符号,如果你要自己定义图片,然后添加进textField 或者Label里,那你就中大奖了,图文混排 需要费很大的功夫处理。

首先 ,想要获取系统的表情,要首先知道表情对应的UTF8 的编码方式,我将其中一部分的图片展示出来 ,然后用UIButton 排列,iOS 7后又增加了300多个表情符号,这些都可以百度查到,现在上代码:

//将数字转为

#define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);

定义的宏将转成UTF8,取出对应的表情符号:

//获取默认表情数组

- (NSArray *)defaultEmoticons {

NSMutableArray *array = [NSMutableArray new];

for (int i=0x1F600; i<=0x1F64F; i++) {

if (i < 0x1F641 || i > 0x1F644) {

int sym = EMOJI_CODE_TO_SYMBOL(i);

NSString *emoT = [[NSString alloc] initWithBytes:&sym length:sizeof(sym)encoding:NSUTF8StringEncoding];

[array addObject:emoT];

}

}

return array;

}

在将对应数组里的表情依次存放到UIButton里,贴出部分代码:

//获取数组

NSArray *arrEmotion = [self defaultEmoticons];

//将表情放到UIButton里

CGFloat W = 30;

CGFloat H = 30;

CGFloat X;

CGFloat Y;

for (int i = 0; i count; i ++) {

X = 10 +(W+5) * (i%10);

Y = 260 + (i/10)* (H +5);

UIButton *biaoqing =[[UIButton alloc] init];

biaoqing.backgroundColor = [UIColor redColor];

biaoqing.frame = CGRectMake(X, Y, W, H);

[self.view addSubview:biaoqing];

NSString *Str = arrEmotion[i];

[biaoqing setTitle:Str forState:UIControlStateNormal];

biaoqing.tag = i;

[biaoqing addTarget:self action:@selector(biaoqingClick:)forControlEvents:UIControlEventTouchUpInside];

}

这样就完成了 在你自定义键盘里的表情添加 ,同时设置该点击事件将表情符号添加进textField或者Label里:

- (void) biaoqingClick:(UIButton *)biaoqing{

NSArray *emoji = [self defaultEmoticons];

NSString *str = emoji[biaoqing.tag];

self.textField.text = str;

}

基本功能完成 ,效果图展示:
 
在后台服务器处理表情方面 ,mysql 5.4之后 就可以自动识别 uicode 的表情编码,并且经验证iOS端的表情符号在安卓上也可以识别,如果mysql的版本过低,报错无法识别uicode编码 ,可以参见服务端对emoji支持的博客:http://segmentfault.com/a/1190000000616820
未完 ,待续  后续贴出做出类似 自定义表情的展示方式 。

iOS 自定义emoji表情键盘的更多相关文章

  1. iOS 获取emoji表情和拦截emoji表情

      1 2 //将数字转为 #define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x &a ...

  2. mysql支持IOS的Emoji表情

    原因: UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 解决办法: 将Mysql的编码从utf8转换成utf8mb4 ...

  3. emoji表情键盘 回退删除方法

  4. iOS swift 关于自定义表情键盘

    目录 输入框 键盘监听 键盘切换 表情装载 表情加载 表情输入 表情输出 表情显示 结束语 demo下载 demo图片: 输入框 为了让输入框能够随着用户输入内容变化自动变化高度,这里的输入框使用UI ...

  5. Swift3.0 功能二 (表情键盘与图文混排)

    随着iOS越来越多表情键盘以及图文混排的需求,本文运用Swift3.0系统的实现其功能以及封装调用方法,写的不好,如有错误望各位提出宝贵意见,多谢 项目源码地址: 相关知识点都有标识 项目源码地址 废 ...

  6. iOS开发之自定义表情键盘(组件封装与自动布局)

    下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,CoreData的使用.有的小伙伴可能会问写一个自 ...

  7. ios开发之--仿(微信)自定义表情键盘

    先附上demo:https://github.com/hgl753951/CusEmoji.git 效果图如下:

  8. Emoji表情图标在iOS与PHP之间通信及MySQL存储

    在某个 iOS 项目中,需要一个服务器来保存一些用户数据,例如用户信息.评论等,我们的服务器端使用了 PHP+MySQL 的搭配.在测试过程中我们发现,用户在 iOS 端里输入了 Emoji 表情提交 ...

  9. 【iOS自定义键盘及键盘切换】详解

    [iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...

随机推荐

  1. IOS new Date() 时间转换失败问题以及其他问题

    一: ios下必须标准格式用'/'分割格式 转换没问题:  new Date('2016/5/30 12:15:20') 二:ie9兼容模式以及以下ie版本 console用前需判断 if(windo ...

  2. js广告弹窗

    生活中我们经常遇到一些烦人的广告页面,比方说弹窗,悬浮等等各种广告.有的同事甚至都下一个屏蔽广告插件到浏览器上.这样就防止了广告的干扰. 但是我们学前端的必须是要知道广告弹窗这个做的过程,甚至是它的原 ...

  3. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序处理并发

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第十篇:为ASP.NET MVC应用程序 ...

  4. Android:padding和android:layout_margin的区别

    padding是站在父view的角度描述问题,它规定它里面的内容必须与这个父view边界的距离. margin则是站在自己的角度描述问题,规定自己和其他(上下左右)的view之间的距离

  5. cocos2d-x lua绑定解析

    花了几天时间看了下cocos2d-x lua绑定那块,总算是基本搞明白了,下面分三部分解析lua绑定: 一.lua绑定主要用到的底层函数 lua绑定其本质就是有一个公用的lua_Stack来进行C和L ...

  6. 做完c语言作业的心得

    算是第一次自己接触c语言,并不是很深入的了解了,但也完成了第一次课的作业.在没有复制粘贴的情况下,8遍的简单编程让我记下了它基本的格式. 实验1.2.3.7都是基本的输入字,和课上的练习差不多,巩固最 ...

  7. 并发编程 05—— Callable和Future

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  8. HTML“计算机输出”标签 <code><kbd><samp><tt><var><pre>

    我们并不反对使用它们,但是如果您只是为了达到某种视觉效果而使用这些标签的话,我们建议您使用样式表,那么做会达到更加丰富的效果. <code> 标签-定义计算机代码文本. 定义和用法: &l ...

  9. MYSQL57密码策略修改

    1.查看当前的密码测试 show variables like 'validate_password%';

  10. PDF 补丁丁 0.4.2.1023 测试版发布:新增旋转页面功能

    新的测试版发布啦.此版本增加了旋转页面的功能. 在“PDF文档选项”对话框的“页面设置”选项卡中,可设置需要旋转的页面(输入页码范围),以及旋转角度. 此外,还修复了统一页面尺寸功能的小问题.