这篇文章将为大家详细讲解有关iOS如何实现表情键盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
最近用到了表情键盘就去网上找了下,感觉网上的都是为了更大的需求写的,而我并不需要所以就自己写了个简单的实现。
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如何实现表情键盘”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。