各类的主流IM,都有自己定义的键盘:有表情键盘,选图片的键盘。其实都是一个inputView。
首先,我们要确定,我们的键盘是输入框调用的。也就是,我们可以设置的是某一个textView的inputView。
// 让键盘进入编辑状态,替换输入源为自定义的fv
// fv 是一个自定义的UIView
- (void)callFaceKeyBoard:(UIButton *)button {
[ktextView becomeFirstResponder];
ktextView.inputView = fv;
[ktextView reloadInputViews];
[ktextView.inputView becomeFirstResponder];// 把自定义键盘设置为第一响应
}
现在这个键盘是调出来了。那我们看看键盘怎么实现。
1 .h
2 #import <UIKit/UIKit.h>
3
4 @interface FaceKeyboardView : UIView
5 // 点击了哪一个表情
6 @property(nonatomic,copy)void (^TapActionBlock)(NSInteger faceID);
7 // 发送信息
8 @property(nonatomic,copy)void (^SendEmojiBlock)();
9
10 - (instancetype)initWithFrame:(CGRect)frame faceArray:(NSArray *)facesArray;
11 @end
12
13
14
15 .m
16
17 #import "FaceKeyboardView.h"
18 @implementation FaceKeyboardView{
19 NSMutableArray * dataArray;// 表情的资源数组
20 UIScrollView * scrollView;// 主的选折页面
21 UIButton * sendButton;// 发送按钮
22 }
23 // 这个一定要实现 而且要设置YES
24 - (BOOL)canBecomeFirstResponder {
25 return YES;
26 }
27 - (instancetype)initWithFrame:(CGRect)frame faceArray:(NSArray *)facesArray{
28 self = [super initWithFrame:frame];
29 if(self) {
30 //设置发送按钮
31 code...
32 //设置主体内容
33 [self setScrollViewContent:facesArray];
34 }
35 return self;
36 }
37
38 - (void)setScrollViewContent:(NSArray *)array {
39 //这里布置好每一个表情的view 添加点击事件
40 }
41
42 - (void)touchThisView:(UIGestureRecognizer *)tap {
43 if([tap.view isKindOfClass:[UIImageView class]])
44 if(self.TapActionBlock) {
45 self.TapActionBlock(tap.view.tag);
46 }
47 }
48
49 - (void)send:(UIButton *)button {
50 if(self.SendEmojiBlock){
51 self.SendEmojiBlock();
52 }
53 }
54
55 @end
56
到这里,只要实现block,把对应的东西添加到textView里面就好了。
当然要关掉它的话,就把textView的inputView设置为nil。