iOS 聊天表情键盘
具体思路
- 通过UIKeyboardWillChangeFrameNotification通知,监听键盘的改变,同时可以得到键盘的Frame和动画的持续时间,
- 新建键盘顶部工具条YSComposeToolBar,默认在底部,Y值随着键盘的改变而改变,会一直显示在键盘的最上面,动画持续时间使用步骤一通知得到的时间
- 新建一个存放表情的YSEmoticonKeyboard(由YSEmoticonListView + YSEmoticonTabBar)整体View,替换掉原生的键盘。其中YSEmoticonListView指的是表情列表,YSEmoticonTabBar指的是表情类型,如:浪小花、默认表情、QQ表情等。
- YSEmoticonListView由UIScrollView+UIPageController 组成。UIScrollView存放着由YSEmoticonPageView装着很多表情(Button)的列表组成。
- 所有的界面控制操作,都封装在YSComposeViewController的控制器中里。
部分代码说明
1.键盘通知
打印一下键盘的UIKeyboardWillChangeFrameNotification通知,我们可以得到键盘的Frame和动画的持续时间。
{name = UIKeyboardWillChangeFrameNotification; userInfo = {UIKeyboardAnimationCurveUserInfoKey = 7;UIKeyboardAnimationDurationUserInfoKey = 0;UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 252}}";UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 441.5}";UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 442}";UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 315}, {320, 253}}";UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 316}, {320, 252}}";UIKeyboardIsLocalUserInfoKey = 1; }}
键盘的Frame和动画的持续时间
NSDictionary *userInfo = notification.userInfo;// 动画的持续时间double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];// 键盘的frameCGRect keyboardF = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
2.替换掉原来的键盘
self.textView.inputView == nil : 使用的是系统自带的键盘
self.textView.inputView = self.emoticonKeyboard; 指的是用表情view替换掉原来的键盘
懒加载一个View
#pragma mark - 懒加载 - (YSEmoticonKeyboard *)emoticonKeyboard {if (!_emoticonKeyboard) {self.emoticonKeyboard = [[YSEmoticonKeyboard alloc] init];// 键盘的宽度self.emoticonKeyboard.width = self.view.width;self.emoticonKeyboard.height = 216;}return _emoticonKeyboard; }
替换掉原来的键盘
/*** 切换键盘*/ - (void)switchKeyboard {// self.textView.inputView == nil : 使用的是系统自带的键盘if (self.textView.inputView == nil) { // 切换为自定义的表情键盘self.textView.inputView = self.emoticonKeyboard;// 显示键盘按钮self.toolbar.showKeyboardButton = YES;} else { // 切换为系统自带的键盘self.textView.inputView = nil;// 显示表情按钮self.toolbar.showKeyboardButton = NO;}// 开始切换键盘self.switchingKeybaord = YES;// 退出键盘 [self.textView endEditing:YES];// 结束切换键盘self.switchingKeybaord = NO;dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{// 弹出键盘 [self.textView becomeFirstResponder];}); }
项目结构
1.YSComposeViewController :发微博Controller
YSComposeToolbar:键盘顶部的工具条
YSEmoticonKeyboard:表情键盘(整体): YSEmoticonListView + YSEmoticonTabBar
YSEmoticonListView:表情列表,由YSEmoticonPageView + 分页
YSEmonticonTabBar:表情底部TabBar,切换不同的表情
2.YSEmoticonListView结构,上面由一个YSEmoticonPageView,加载一页的列表,有多少页表情列表,就有多少个pageView。底部是一个分页控件UIPageControl。
源代码下载地址:https://github.com/jiangys/ChatKeyboard
iOS 聊天表情键盘相关推荐
- flutter聊天界面-自定义表情键盘实现
flutter聊天界面-自定义表情键盘实现 flutter 是 Google推出并开源的移动应用开发框架,主打跨平台.高保真.高性能.开发者可以通过 Dart语言开发 App,一套代码同时运行在 iO ...
- ios 表情符号 键盘_iOS 表情键盘+gif聊天图文混排,看我的就够了
更新: 1.解决首次加载键盘卡顿的问题: 2.修改聊天布局方式,现在无需计算,更加丝滑. 前言: 之前做过[OC版本]和[swift版本]图文混排和表情键盘,说实在的很low,特别是键盘,整体只是实现 ...
- swift 聊天表情emoji转译(一)——从键盘到输入框
题记 做聊天框时,遇到了几个麻烦事,在此记录,以备自查,其他观者仅供参考.有更好的做法,也请赐教. 代码并不可直接复制使用.写博客时,添加了详细的注释,标明每段代码的用途. 正文 聊天输 ...
- iOS开发-------自定义简单的表情键盘(UICollectionView 集合视图)
最近制作自制表情键盘的时候,突然了解到还有一个叫做UICollectionView (集合视图)的类,就研究了一下,确实在做表情键盘上要比用 UIScrollView(滚动视图) 要简单的多,用法与 ...
- ios 表情符号 键盘_iOS中表情键盘的完整实现方法详解
前言 最近在公司做了个表情键盘的需求,这个需求的技术难度不会很大,比较偏向业务.但是要把用户体验做的好也是不容易的,其中有几个点需要特别注意.话不多说,下面开始正文(注:本文对应的Demo放在Gith ...
- IOS控件系列--优雅的表情键盘设计(扩展性好)
本控件效果如下图所示: 本控件设计的几个原则 : 1.扩展性好,代码不冗余. 2.逻辑清晰. 3.回调接口清晰. 4.移植性好. 首先来讨论下本控件的扩展性: 效果图给出的是3行7列.如果这个行列因子 ...
- iOS 【快速集成QQ表情键盘】
Demo演示: 如果是UITextView,导入#import "UITextView+YZEmotion.h" 如果是UITextField,导入#import "UI ...
- iOS_仿QQ表情键盘
当UITextFiled和UITextView这种文本输入类控件成为第一响应者时,弹出的键盘由他们的一个UIView类的inputView属性来控制,当inputView为nil时会弹出系统的键盘,想 ...
- Swift3.0 功能二 (表情键盘与图文混排)
随着iOS越来越多表情键盘以及图文混排的需求,本文运用Swift3.0系统的实现其功能以及封装调用方法,写的不好,如有错误望各位提出宝贵意见,多谢 项目源码地址: 相关知识点都有标识 项目源码地址 废 ...
最新文章
- 自动化监控--zabbix中的Macros(宏)详解
- php导出照片,TP5导出excel图片和数据--先下载图片到本地服务器
- 力扣:7整数反转(python)
- 用Eclipse进行C/C++开发
- 天池 在线编程 寻找比周围都大的点(模拟)
- 矩阵求逆c语言实现_[V-SLAM] Bundle Adjustment 实现
- java shapes_Java Overlaping Shapes – 错误的重叠形状行为
- activiti 解压zip java.lang.IllegalArgumentException: MALFORMED 错误
- 程序员生存定律--如何尽快变的稍微专业一点
- 微宝球型机器人功能_腾讯智能球型机器人专属app(微宝)
- 计算机四级 信息安全工程师——计算机网络题库
- remix os显卡linux,Remix OS 系统 PC版下载和评测 | Remix OS是什么系统_什么值得买
- 京东商品数据数据爬取
- pyTorch中tensor运算
- 微机原理与接口技术复习笔记(1)——微型计算机概述
- VS Code + phpstudy实现PHP环境配置
- 多智能体强化学习(三)单智能体强化学习
- iOS开发 字体的几种设置方法
- timesten支持mysql吗_TimesTen数据库初探
- 【图形学】04 数学部分(四、放射变换)
热门文章
- recyclerview简单使用
- Linux命令提示行设置--SP1
- 小班运用计算机教学活动,小班《小蚂蚁》活动教案精选
- python如何给某列数据打标签_Python map, apply, transform 打标签方法汇总(初阶到高阶)...
- AF_XDP socket 测试
- Windows 7 安装软件错误:“Error 1935 ...HRESULT: 0x800736FD” 的解决办法
- ROS turtlebot_follower :让机器人跟随我们移动
- 多源异构网络安全关联分析
- 微信公众号模板消息推送问题汇总
- STM32+HC-05蓝牙模块学习与使用