iOS表情鍵盤的簡單實現(xiàn)代碼
更新時間:2017年03月25日 15:12:01 作者:Kerwin
這篇文章主要為大家詳細介紹了iOS表情鍵盤的簡單實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
最近用到了表情鍵盤就去網(wǎng)上找了下,感覺網(wǎng)上的都是為了更大的需求寫的,而我并不需要所以就自己寫了個簡單的實現(xiàn)。
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.創(chuàng)建控件:
//聲明的全局變量:
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];
//發(fā)送按鈕
UIButton *sendButton = [UIButton buttonWithFrame:CGRectMake(emojiAndKeyboardButton.maxX, commentTextField.minY, 50, 40) type:UIButtonTypeCustom title:@"發(fā)送" 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];
//從文件里獲取到的表情字符串數(shù)組
emojiArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"Emoji" ofType:@"plist"]];
CGFloat emojiButtonWidth = kScreenWidth/8;
int i = 0;
//頁數(shù)向上取整
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);
//循環(huán)創(chuàng)建表情按鈕
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列就設置刪除表情的圖片替代字符串,并調(diào)用另一個方法
[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等于數(shù)組計數(shù)時就打斷循環(huán)
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 = @"";
}
}
//在代理方法中調(diào)整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;
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IOS開發(fā)OC代碼中創(chuàng)建Swift編寫的視圖控制器
這篇文章主要介紹了IOS開發(fā)OC代碼中創(chuàng)建Swift編寫的視圖控制器的相關(guān)資料,需要的朋友可以參考下2017-06-06

