iOS 如何解决无法将键盘隐藏
iOS 如何解决无法将键盘隐藏
萨斯辈的呼唤 发表于3年前
iOS 如何解决无法将键盘隐藏
  • 发表于 3年前
  • 阅读 823
  • 收藏 4
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 解决UIResponder响应者链所产生的一系列问题。

问题:

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



共有 人打赏支持
粉丝 30
博文 89
码字总数 33346
×
萨斯辈的呼唤
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: