美文网首页
父控件拦截了子控件点击时的解决办法

父控件拦截了子控件点击时的解决办法

作者: 面糊 | 来源:发表于2016-07-25 21:40 被阅读605次

情况如图所示, 星星(starView)的父控件(bottomView)由于需要关闭键盘, 所以添加了tap手势, 解决方法如下:

  1. starView的点击事件被bottomView拦截了, 无法再响应事件
  2. 取消使用tap手势, 转为使用touchesBegan方法来添加手势
  3. 由于touchesBegan方法是添加到bottomView的父控件上, 所以这时候bottomView是无法关闭键盘的
  4. 重写hitTest方法, 并且转换点的坐标系为bottomView, 然后通过点所在的位置来判断响应点击的View


    Paste_Image.png

代码如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self endEditing:YES];
}

// 转换坐标系, 拦截点击事件
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    CGPoint point1 = [self convertPoint:point toView:_bottomView];
    if (CGRectContainsPoint(_starView.frame, point1)) {
        return _starView;
    } else {
        return [super hitTest:point withEvent:event];
    }
}

相关文章

网友评论

      本文标题:父控件拦截了子控件点击时的解决办法

      本文链接:https://www.haomeiwen.com/subject/nwqnjttx.html