前言##
本文介紹是自定義鍵盤的系列的續(xù)集伴栓,如果想了解鍵盤的更多知識可以查看
自定義鍵盤系列之一怎樣自定義輸入文本框
表情鍵盤的效果圖
動態(tài)示意圖
![Uploading 自定義表情鍵盤_959782.png . . .]](http://upload-images.jianshu.io/upload_images/1886288-6deff37ea1443ecc.gif?imageMogr2/auto-orient/strip)
表情鍵盤分析###
表情鍵盤與普通鍵盤相比需要考慮以下一些問題:
1、普通鍵盤和表情鍵盤切換事件,改變下面鍵盤View?
2狮惜、表情包從哪里來?
3、表情鍵盤顯示的View怎么寫,以及表情的操作怎么辦?
4、表情在輸入框中的顯示怎么弄(編碼與轉(zhuǎn)碼)?
具體實現(xiàn)##
解決問題 1狰住、 普通鍵盤和表情鍵盤切換事件,改變下面鍵盤View?
自定義切換按鈕,并且在按鈕點擊的時候響應(yīng)事件齿梁,判斷顯示自定義表情InputView還是系統(tǒng)的鍵盤InputView
- (void)faceButtonClick:(UIButton *)faceButton
{
faceButton.selected = !faceButton.isSelected;
self.bottomLine.hidden = !faceButton.selected;
[self.inputTextView resignFirstResponder];
self.inputTextView.inputView = faceButton.selected?self.faceView : nil;
[self.inputTextView becomeFirstResponder];
}
這段代碼很重要催植,首先切換按鈕的選中狀態(tài),通過是否選中來判斷是否更換InputView(就是工具條下面的鍵盤)
//調(diào)用鍵盤keyboardWillChangeFrame
[self.inputTextView resignFirstResponder];
//改變輸入View那個(nil表示系統(tǒng)文本鍵盤)
self.inputTextView.inputView = faceButton.selected?self.faceView : nil;
//調(diào)用鍵盤keyboardWillChangeFrame
[self.inputTextView becomeFirstResponder];
解決問題 2勺择、表情包從哪里來?
表情包有兩種來源方式创南,根據(jù)公司的需求來定:
A、蘋果的表情編碼省核,可以寫成plist文件(這個網(wǎng)上一堆資料)(本文采用)
B稿辙、公司給定圖片,也可以采用同樣的方式加載(項目采用)
最終結(jié)果就是需要一個數(shù)組數(shù)據(jù)用來顯示到自定義的表情FaceView上面
解決問題 3气忠、表情鍵盤顯示的View怎么寫邻储,以及表情的操作怎么辦?
首先思考,可以滾動旧噪,肯定與UIScrollView有關(guān)吨娜,但是又可能有多個頁面的表情,所以采用自定義單個面板的方式計算每個面板顯示多少個表情淘钟,需要幾個面板宦赠。同時每個表情圖都需要被點擊,所以都設(shè)置成按鈕。
基本結(jié)構(gòu)如下:
詳情代碼請直接下載demo查看:
自定義鍵盤-LZBKeyBoardView
解決問題4勾扭、表情在輸入框中的顯示表情按鈕(編碼與轉(zhuǎn)碼)?
如果采用UI圖片毡琉,那么就直接顯示按鈕的圖片就好;
如果采用蘋果編碼方式妙色,就需要編碼與轉(zhuǎn)碼桅滋,看到這里就感覺頭大,但是沒有關(guān)系燎斩,我已經(jīng)寫好一個分類給大家用虱歪,不用當(dāng)心
//將十六進(jìn)制的編碼轉(zhuǎn)為emoji字符
+ (NSString *)emojiWithByIntCode:(int)intCode
{
int sym = EMOJI_CODE_TO_SYMBOL(intCode);
NSString *codeString = [[NSString alloc]initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
if (codeString == nil) {
codeString = [NSString stringWithFormat:@"%C", (unichar)intCode];
}
return codeString;
}
將十六進(jìn)制字符串編碼轉(zhuǎn)為emoji字符
+ (NSString *)emojiWithByStringCode:(NSString *)stringCode
{
char *charCode = (char *)stringCode.UTF8String;
long intCode = strtol(charCode, NULL, 16);
return [self emojiWithByIntCode:(int)intCode];
}
小建議###
我覺得每個公司都應(yīng)該有自己的一套鍵盤,小編在這里給大家整理出來了一套栅表,但是可能不一定適合您的項目笋鄙,但是依然具有參考價值,真正合適的是要自己寫的怪瓶。
詳情代碼請直接下載demo查看:
自定義鍵盤-LZBKeyBoardView
最后贈言###
star 是對我們程序猿最大的鼓勵