iOS 聊天表情鍵盤


具體思路

  1. 通過UIKeyboardWillChangeFrameNotification通知,監聽鍵盤的改變,同時可以得到鍵盤的Frame和動畫的持續時間,
  2. 新建鍵盤頂部工具條YSComposeToolBar,默認在底部,Y值隨着鍵盤的改變而改變,會一直顯示在鍵盤的最上面,動畫持續時間使用步驟一通知得到的時間
  3. 新建一個存放表情的YSEmoticonKeyboard(由YSEmoticonListView + YSEmoticonTabBar)整體View,替換掉原生的鍵盤。其中YSEmoticonListView指的是表情列表,YSEmoticonTabBar指的是表情類型,如:浪小花、默認表情、QQ表情等。
  4. YSEmoticonListView由UIScrollView+UIPageController 組成。UIScrollView存放着由YSEmoticonPageView裝着很多表情(Button)的列表組成。
  5. 所有的界面控制操作,都封裝在YSComposeViewController的控制器中里。

部分代碼說明

1.鍵盤通知

打印一下鍵盤的UIKeyboardWillChangeFrameNotification通知,我們可以得到鍵盤的Frame和動畫的持續時間。

{name = UIKeyboardWillChangeFrameNotification; userInfo = {
    UIKeyboardAnimationCurveUserInfoKey = 7;
    UIKeyboardAnimationDurationUserInfoKey = 0;
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 252}}";
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 441.5}";
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 442}";
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 315}, {320, 253}}";
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 316}, {320, 252}}";
    UIKeyboardIsLocalUserInfoKey = 1;
}}

鍵盤的Frame和動畫的持續時間

    NSDictionary *userInfo = notification.userInfo;
    // 動畫的持續時間
    double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    // 鍵盤的frame
    CGRect keyboardF = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

2.替換掉原來的鍵盤

self.textView.inputView == nil : 使用的是系統自帶的鍵盤

self.textView.inputView = self.emoticonKeyboard; 指的是用表情view替換掉原來的鍵盤

懶加載一個View

#pragma mark - 懶加載
- (YSEmoticonKeyboard *)emoticonKeyboard
{
    if (!_emoticonKeyboard) {
        self.emoticonKeyboard = [[YSEmoticonKeyboard alloc] init];
        // 鍵盤的寬度
        self.emoticonKeyboard.width = self.view.width;
        self.emoticonKeyboard.height = 216;
    }
    return _emoticonKeyboard;
}

替換掉原來的鍵盤

/**
 *  切換鍵盤
 */
- (void)switchKeyboard
{
    // self.textView.inputView == nil : 使用的是系統自帶的鍵盤
    if (self.textView.inputView == nil) { // 切換為自定義的表情鍵盤
        self.textView.inputView = self.emoticonKeyboard;
        // 顯示鍵盤按鈕
        self.toolbar.showKeyboardButton = YES;
    } else { // 切換為系統自帶的鍵盤
        self.textView.inputView = nil;
        
        // 顯示表情按鈕
        self.toolbar.showKeyboardButton = NO;
    }
    
    // 開始切換鍵盤
    self.switchingKeybaord = YES;
    
    // 退出鍵盤
    [self.textView endEditing:YES];
    
    // 結束切換鍵盤
    self.switchingKeybaord = NO;
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 彈出鍵盤
        [self.textView becomeFirstResponder];
    });
}

 

項目結構

1.YSComposeViewController :發微博Controller

  YSComposeToolbar:鍵盤頂部的工具條

 

YSEmoticonKeyboard:表情鍵盤(整體): YSEmoticonListView + YSEmoticonTabBar

YSEmoticonListView:表情列表,由YSEmoticonPageView + 分頁

YSEmonticonTabBar:表情底部TabBar,切換不同的表情

 

2.YSEmoticonListView結構,上面由一個YSEmoticonPageView,加載一頁的列表,有多少頁表情列表,就有多少個pageView。底部是一個分頁控件UIPageControl。

 

源代碼下載地址:https://github.com/jiangys/ChatKeyboard

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM