最近用到了表情键盘就去网上找了下,感觉网上的都是为了更大的需求写的,而我并不需要所以就自己写了个简单的实现。
1.用到的表情字符串是从Emojiplist文件里获取到的;

2.需要添加一个观察者:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
- (void)keyboardWillShow:(NSNotification *)notification
{
// 键盘显示\隐藏完毕的frame
CGRect frame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
// 动画时间
CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
// 动画
[UIView animateWithDuration:duration animations:^{
commentView.minY = -frame.size.height;
}];
}
3.创建控件:
//声明的全局变量:
UIButton *commentView;
UIView *commentWhiteColorView;
UITextField *commentTextField;
UIButton *emojiAndKeyboardButton;
- (void)initCommentToolbarView
{
commentView = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight + 230)];
commentView.hidden = YES;
[commentView addTarget:self action:@selector(commentViewAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:commentView];
commentWhiteColorView = [UIView viewWithFrame:CGRectMake(0, kScreenHeight - 50, kScreenWidth, 50) backgroundColor:[UIColor whiteColor]];
commentWhiteColorView.backgroundColor = [UIColor whiteColor];
[commentView addSubview:commentWhiteColorView];
UIView *lightGrayLineView = [UIView viewWithFrame:CGRectMake(0, 0, kScreenWidth, 1) backgroundColor:RGB(240, 240, 240)];
[commentWhiteColorView addSubview:lightGrayLineView];
//文本输入框
commentTextField = [[UITextField alloc]initWithFrame:CGRectMake(10, 5, kScreenWidth - (10 + 42 + 60), 40)];
commentTextField.font = FONT(14);
commentTextField.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 10, 40)];
commentTextField.leftViewMode = UITextFieldViewModeAlways;
commentTextField.backgroundColor = RGB(234, 234, 234);
commentTextField.placeholder = @"评论";
[commentWhiteColorView addSubview:commentTextField];
//表情和键盘切换按钮
emojiAndKeyboardButton = [UIButton buttonWithType:UIButtonTypeCustom];
emojiAndKeyboardButton.frame = CGRectMake(commentTextField.maxX + 7, 0, 35, 50);
[emojiAndKeyboardButton setImage:[UIImage imageNamed:@"icon_emoji_input"] forState:UIControlStateNormal];
[emojiAndKeyboardButton setImage:[UIImage imageNamed:@"icon_keyboard_input"] forState:UIControlStateSelected];
[emojiAndKeyboardButton addTarget:self action:@selector(emojiAndKeyboardButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[commentWhiteColorView addSubview:emojiAndKeyboardButton];
//发送按钮
UIButton *sendButton = [UIButton buttonWithFrame:CGRectMake(emojiAndKeyboardButton.maxX, commentTextField.minY, 50, 40) type:UIButtonTypeCustom title:@"发送" titleColor:RGB(135, 135, 135) imageName:nil action:@selector(sendButtonAction) target:self];
sendButton.titleLabel.font = FONT(14);
[sendButton setBorder:1 color:RGB(135, 135, 135)];
[sendButton setCornerRadius:3];
[commentWhiteColorView addSubview:sendButton];
//表情滚动视图
emojiScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, commentWhiteColorView.maxY, kScreenWidth, 200)];
emojiScrollView.backgroundColor = RGB(244, 244, 246);
emojiScrollView.delegate = self;
emojiScrollView.pagingEnabled = YES;
[commentView addSubview:emojiScrollView];
//从文件里获取到的表情字符串数组
emojiArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"Emoji" ofType:@"plist"]];
CGFloat emojiButtonWidth = kScreenWidth/8;
int i = 0;
//页数向上取整
int page = ceilf(emojiArray.count/32.0);
//UIKit里的页面控制器
pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, emojiScrollView.maxY, kScreenWidth, 30)];
pageControl.numberOfPages = page;
pageControl.backgroundColor = RGB(244, 244, 246);
pageControl.pageIndicatorTintColor = RGB(206, 206, 206);
pageControl.currentPageIndicatorTintColor = RGB(121, 121, 121);
[commentView addSubview:pageControl];
//设置表情滚动视图的contentSize
emojiScrollView.contentSize = CGSizeMake(kScreenWidth * page, 200);
//循环创建表情按钮
for (int currentPage = 0; currentPage < page; currentPage++) {
for (int row = 0; row < 4; row++) {
for (int column = 0; column < 8; column++) {
UIButton *emojiButton = [UIButton buttonWithType:UIButtonTypeCustom];
if (row == 3 && column == 7) {
//如果是第4行第8列就设置删除表情的图片替代字符串,并调用另一个方法
[emojiButton setImage:[UIImage imageNamed:@"back_icon_input"] forState:UIControlStateNormal];
[emojiButton addTarget:self action:@selector(deleteEmojiAction) forControlEvents:UIControlEventTouchUpInside];
}else{
[emojiButton setTitle:emojiArray[i++] forState:UIControlStateNormal];
[emojiButton addTarget:self action:@selector(emojiButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
emojiButton.frame = CGRectMake(emojiButtonWidth * column + currentPage * kScreenWidth, 50 * row, emojiButtonWidth, 50);
[emojiScrollView addSubview:emojiButton];
//当i等于数组计数时就打断循环
if (i == emojiArray.count) {
break;
}
}
}
}
//手动添加最后一个删除表情按钮
UIButton *emojiButton = [UIButton buttonWithType:UIButtonTypeCustom];
[emojiButton setImage:[UIImage imageNamed:@"back_icon_input"] forState:UIControlStateNormal];
emojiButton.frame = CGRectMake(emojiButtonWidth * 7 + 5 * kScreenWidth, 50 * 3, emojiButtonWidth, 50);
[emojiButton addTarget:self action:@selector(deleteEmojiAction) forControlEvents:UIControlEventTouchUpInside];
[emojiScrollView addSubview:emojiButton];
}
//表情按钮事件
- (void)emojiButtonAction:(UIButton *)sender
{
// NSLog(@"%@",sender.currentTitle);
NSMutableString *oldText = [NSMutableString stringWithString:commentTextField.text];
[oldText appendString:sender.currentTitle];
commentTextField.text = oldText;
}
//删除表情按钮事件
- (void)deleteEmojiAction
{
if (commentTextField.text.length > 1) {
//判断是否是表情,表情length为2,所以减去2
if ([emojiArray containsObject:[commentTextField.text substringWithRange:NSMakeRange(commentTextField.text.length - 2, 2)]]) {
commentTextField.text = [commentTextField.text substringToIndex:commentTextField.text.length - 2];
}else{
commentTextField.text = [commentTextField.text substringToIndex:commentTextField.text.length - 1];
}
}else{
commentTextField.text = @"";
}
}
//在代理方法中调整pageControl
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (scrollView == emojiScrollView) {
pageControl.currentPage = scrollView.contentOffset.x/scrollView.width;
}
}
//表情和键盘切换按钮事件
- (void)emojiAndKeyboardButtonAction:(UIButton *)sender
{
sender.selected = !sender.selected;
if (sender.selected == YES) {
[commentTextField resignFirstResponder];
[UIView animateWithDuration:0.5 animations:^{
commentView.minY = -230;
}];
}else{
[commentTextField becomeFirstResponder];
}
}
- (void)commentViewAction
{
[commentTextField resignFirstResponder];
commentView.hidden = YES;
commentView.minY = 0;
commentTextField.text = @"";
emojiAndKeyboardButton.selected = NO;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# iOS
# 表情键盘
# iOS中表情键盘的完整实现方法详解
# 关于iOS自带九宫格拼音键盘和Emoji表情之间的一些坑
# iOS高仿微信表情输入功能代码分享
# iOS中判断Emoji表情问题
# iOS组件封装与自动布局自定义表情键盘
# IOS程序开发之禁止输入表情符号实例代码
# iOS禁止所有输入法表情的方法
# 都是
# 网上
# 更大
# 是从
# 而我
# 找了
# 写了
# 就去
# 时就
# 大家多多
# 输入框
# 判断是否
# 全局变量
# kScreenHeight
# addTarget
# kScreenWidth
# hidden
# commentViewAction
# forControlEvents
# UIControlEventTouchUpInside
相关文章:
建站之星如何优化SEO以实现高效排名?
浅析上传头像示例及其注意事项
微课制作网站有哪些,微课网怎么进?
如何用景安虚拟主机手机版绑定域名建站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
javascript基本数据类型及类型检测常用方法小结
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
成都网站制作报价公司,成都工业用气开户费用?
测试制作网站有哪些,测试性取向的权威测试或者网站?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何制作算命网站,怎么注册算命网站?
如何快速查询网址的建站时间与历史轨迹?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
香港服务器租用费用高吗?如何避免常见误区?
如何用腾讯建站主机快速创建免费网站?
建站之星后台密码遗忘?如何快速找回?
C#如何序列化对象为XML XmlSerializer用法
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
,想在网上投简历,哪几个网站比较好?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
建站主机核心功能解析:服务器选择与网站搭建流程指南
建站之星IIS配置教程:代码生成技巧与站点搭建指南
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何快速配置高效服务器建站软件?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
建站DNS解析失败?如何正确配置域名服务器?
,巨量百应是干嘛的?
如何快速搭建高效服务器建站系统?
如何快速搭建安全的FTP站点?
C#如何使用XPathNavigator高效查询XML
如何用VPS主机快速搭建个人网站?
网站网页制作专业公司,怎样制作自己的网页?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
建站主机选择指南:服务器配置与SEO优化实战技巧
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
建站之星后台密码遗忘如何找回?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
制作农业网站的软件,比较好的农业网站推荐一下?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何通过虚拟主机快速完成网站搭建?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在Windows虚拟主机上快速搭建网站?
如何在IIS中配置站点IP、端口及主机头?
*请认真填写需求信息,我们会在24小时内与您取得联系。