最近用到了表情键盘就去网上找了下,感觉网上的都是为了更大的需求写的,而我并不需要所以就自己写了个简单的实现。
1.用到的表情字符串是从Emojiplist文件里获取到的;
2.需要添加一个观察者:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[[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.创建控件:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
//声明的全局变量:
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;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。