问题:
布局
在一个父视图上添加了UITableView以及一个UITextView(UITextView为底部,其他为UITableView的布局)。当点击UITextView的时候,响应正常。当结束写入的时候,须要调用[UITextView resignFirstResponder]来隐藏键盘。这就致使,没法收起键盘。
spa
缘由:code
当点击UITableView的时候,所触发非UITextView的时候,也就是触摸的是UITableView。当手指touch的时候,响应链便开始从视图的顶部往下响应。当它到达UITableView的时候,UItableView是继承UIScrollewView的,因此,这个信号被UITableView所响应,也就是执行了UITableView的touch方法。因此,UITextView就没法响应。
继承
解决办法:it
给UITableView作扩展,让其过滤第一次响应:io
@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
在须要的地方,导入这个。
event
在该类中调用,并判断是否是这个UITableView,若是不是,那就能够收起键盘了。table
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; UITableView *teableView = (UITableView *)[touches anyObject]; if (teableView != self.tableView) { [textView resignFirstResponder]; } }
=============================================class
还有一种方法,不太建议使用。扩展
也就是在键盘弹起的时候,在最上层放一个可点击的View,便可。