最近项目中需要在嵌套的TableView的cell点击时响应最外层的选择事件,但是嵌套的cell的按钮事件却要响应。所以我们需要在嵌套的cell上做一次处理。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
// 判断触摸位置是否在当前视图内
if ([self pointInside:point withEvent:event]) {
// 只遍历contenView上的子视图 方便控制
NSArray<UIView *> * superViews = self.contentView.subviews;
// 倒序 从最上面的一个视图开始查找
for (NSUInteger i = superViews.count; i > 0; i--) {
UIView * subview = superViews[i - 1];
// 转换坐标系 使坐标基于子视图
CGPoint newPoint = [self convertPoint:point toView:subview];
// 得到子视图 hitTest 方法返回的值
UIView * view = [subview hitTest:newPoint withEvent:event];
// 如果子视图返回一个view 就直接返回 不在继续遍历
if (view ) {
// NSLog(@"%@",[view class]);
return view;
}
}
return [[self superview] superview];
}
return nil;
}