iOS 如何解决没法将键盘隐藏

问题:
布局

在一个父视图上添加了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,便可。

相关文章
相关标签/搜索