聊天頁面滑動UITableView隱藏鍵盤

最近有個需求需要做一個聊天功能,界面功能都已經(jīng)搭建好,開始慢慢的優(yōu)化用戶體驗。其中有個最簡單的需求:點擊輸入框-->鍵盤顯示,tableView上移;用戶滑動tableView,鍵盤隱藏,tableView下移。

最初覺得這個需求非常簡單,監(jiān)聽UIKeyboardWillShowNotificationUIKeyboardWillHideNotification通知上移或下移tableView。再實現(xiàn)tableView的代理方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
      [self.view endEditing:YES];
}

tableView滑動時停止輸入不就好了。寫完之后一運行才發(fā)現(xiàn)不是那回事。

scrollViewDidScroll:這個方法不僅在用戶滑動時響應(yīng)。當(dāng)鍵盤顯示過程中,tableView上移,結(jié)果也調(diào)用了這個方法,鍵盤立即又隱藏了。

無奈之下我又加了個判斷BOOL isShowingKeyBoard,又監(jiān)聽了UIKeyboardDidShowNotification通知,scrollViewDidScroll方法改成了這樣:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
        if(! isShowingKeyBoard)
     {
           [self.view endEditing:YES];
      }
}

另外凡是需要代碼滑動tableView的情況,animation全部設(shè)置為NO,總算是暫時解決了這個問題。

可惜千算萬算沒算到在鍵盤顯示后,切換鍵盤輸入方式竟然也會導(dǎo)致tableView自己滑動,調(diào)用scrollViewDidScroll代理方法。這下算是沒轍了,只能另想辦法。

最開始考慮使用監(jiān)聽tableViewtouch事件,不過這樣有點麻煩還要寫個繼承類,后來想起UIGestureRecognizer有個代理方法可以間接實現(xiàn)這個需求:

- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer 
shouldReceiveTouch:(UITouch *)touch
{
       [self.view endEditing:YES];
      return NO;
}

最終給tableView添加了一個滑動手勢UIPanGestureRecognizer,實現(xiàn)上述代理方法,刪除了上面的scrollViewDidScroll方法,確實非常管用,值得記錄。

之所以這個方法這么管用,還在于只要是用戶滑動tableView一定會調(diào)用這個方法,先直接隱藏鍵盤,再返回NO表示不響應(yīng)用戶的操作。這樣用戶的touch事件還是會交給tableView自己的panGesture去響應(yīng)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容