情况如图所示, 星星(starView)的父控件(bottomView)由于需要关闭键盘, 所以添加了tap手势, 解决方法如下:
- starView的点击事件被bottomView拦截了, 无法再响应事件
- 取消使用tap手势, 转为使用touchesBegan方法来添加手势
- 由于touchesBegan方法是添加到bottomView的父控件上, 所以这时候bottomView是无法关闭键盘的
-
重写hitTest方法, 并且转换点的坐标系为bottomView, 然后通过点所在的位置来判断响应点击的View
代码如下:
- (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];
}
}