各类的主流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。