以前点击空白隐藏键盘使用的都是
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
if (![touch.view isKindOfClass: [UITextField class]] || ![touch.view isKindOfClass: [UITextView class]]) {
[self.view endEditing:YES];
}
}
这次这个界面被UITableview铺满,UITextField在自定义cell中,不响应这个方法,事实上“UITableView是不会响应touchesBegan:方法的”。转而采用下面方法,在viewDidLoad中注册手势,然后在UIGestureRecognizerDelegate代理方法中检测touch.view,如果不是UITextField,则设置隐藏,这样做的好处是不会影响到UITableview其他行的点击事件
#pragma mark--
#pragma mark--UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if (![touch.view isKindOfClass: [UITextField class]]) {
[self hideKeyBoard];
return NO;
}
NSLog(@"shouldReceiveTouch = yes");
return YES;
}
- (void)hideKeyBoard{
//创建第0区第1行的indexPath
NSUInteger newIndex[] = {0, 1};
NSIndexPath *newPath = [[NSIndexPath alloc] initWithIndexes:newIndex length:2];
//找到对应的cell
PayCell *nextCell = (<span style="font-family: Arial, Helvetica, sans-serif;">MyTableViewCell</span> *)[self.tableView cellForRowAtIndexPath:newPath];
[nextCell.numText resignFirstResponder];//numText就是UITextField
}
参考文章:1. http://www.tuicool.com/articles/fmaMnaN
2. http://blog.csdn.net/chen505358119/article/details/9118271