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

情况如图所示, 星星(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];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容