一行代碼解決UITableView鍵盤收起

##iOS中經常使用地收起鍵盤的幾種方式windows

  • #####添加singleTap單擊手勢
  • #####調用API方法

####1.添加singleTap單擊手勢ui

UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeKeyboard:)];
singleTapGesture.numberOfTapsRequired = 1;
singleTapGesture.cancelsTouchesInView = NO;
[tableView addGestureRecognizer:singleTapGesture];

#pragma mark - gesture actions
- (void)closeKeyboard:(UITapGestureRecognizer *)recognizer {
     //在對應的手勢觸發方法裏面讓鍵盤失去焦點    
    [_textField resignFirstResponder];
    //或者使用第二種方法,該方法會一直找到textField或者內嵌的texfield,讓它取消第一響應者
    //[self.view endEditing:YES];
 }
  你們可能會對cancelsTouchesInView這個屬性有所好奇,爲何要設置成NO,咱們經過看其官方API
  A Boolean value affecting whether touches are delivered to a view when a gesture is recognized.
  default is YES. causes touchesCancelled:withEvent: or pressesCancelled:withEvent: 
 to be sent to the view for all touches or presses recognized as part of this gesture immediately before the action method is called.
這句話的意思就是說設置這個值將會影響到手指的觸摸事件是否會傳送到添加該手勢的View上在本文中即recongizer.view(tableView)
這樣可能仍是不夠清晰,再說清楚一些就是當咱們添加一個reconnizer手勢給一個視圖的時候,當前window分發觸摸事件的時候,
會先問該手勢有沒有被識別(能夠理解爲於手勢綁定的action方法有沒有被觸發),當手勢識別成功,就會問cancelsTouchesInView是否爲YES,若是設置爲YES,
觸摸事件就不會繼續分發,那麼tableview的 tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法不會觸發,
由於觸摸事件被提早結束了!當手勢識別失敗的時候(即沒有被調用的時候), window就會繼續把事件傳遞下去給該tableView,由於View也是繼承自UIResponder的,
會當即執行 touchesCancelled:withEvent: or pressesCancelled:withEvent: 到此一個觸摸事件循環結束!那麼當cancelsTouchesInView設置爲NO會發生什麼樣的變化呢?
前面仍是不變,當手勢識別成功,就會問cancelsTouchesInView是否爲YES,若是設置爲NO,觸摸事件會繼續傳遞給響應鏈,就不會當即返回,所以仍是會調用tableView的
tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 還有cell 的按鈕觸發方法,都是不會受到影響的!

換句話說就是cancelsTouchesInView :若是Recognizer分析成功,就會解除View上的綁定的剩餘手勢事件,那麼windows也不會給發送這寫手勢事件。
windows經過給view發送touchesCancelled:withEvent:消息來退出舊事件處理。
複製代碼

####2.調用API方法 tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; UIScrollViewKeyboardDismissModeNone,//默認第一種,爲none UIScrollViewKeyboardDismissModeOnDrag,//鍵盤會當tableView上下滾動的時候自動收起 UIScrollViewKeyboardDismissModeInteractive, // 設置鍵盤的消失方式爲拖拉並點擊頁面,iOS7新增特性this

相關文章
相關標籤/搜索