##iOS中常用地收起键盘的几种方式
- #####添加singleTap单击手势
- #####调用API方法
####1.添加singleTap单击手势
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新增特性