问题:
在一个父视图上添加了UITableView以及一个UITextView(UITextView为底部,其余为UITableView的布局)。当点击UITextView的时候,响应正常。当结束写入的时候,需要调用[UITextView resignFirstResponder]来隐藏键盘。这就导致,无法收起键盘。
原因:
当点击UITableView的时候,所触发非UITextView的时候,也就是触摸的是UITableView。当手指touch的时候,响应链便开始从视图的顶部往下响应。当它到达UITableView的时候,UItableView是继承UIScrollewView的,所以,这个信号被UITableView所响应,也就是执行了UITableView的touch方法。所以,UITextView就无法响应。
解决办法:
给UITableView做扩展,让其过滤第一次响应:
@implementation UITableView (UITouch)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self nextResponder] touchesBegan:touches withEvent:event];
[super touchesEnded:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[[self nextResponder] touchesMoved:touches withEvent:event];
[super touchesEnded:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[[self nextResponder] touchesEnded:touches withEvent:event];
[super touchesEnded:touches withEvent:event];
}
@end
在需要的地方,导入这个。
在该类中调用,并判断是不是这个UITableView,如果不是,那就可以收起键盘了。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
UITableView *teableView = (UITableView *)[touches anyObject];
if (teableView != self.tableView) {
[textView resignFirstResponder];
}
}
=============================================
还有一种方法,不太建议使用。
也就是在键盘弹起的时候,在最上层放一个可点击的View,即可。
来源:oschina
链接:https://my.oschina.net/u/237375/blog/325828