最近項目中需要在嵌套的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;
}