我有一堆子视图,它们都有用户交互部分(儿童)和全屏。问题是,如果我触及堆栈顶部的非交互式部分,它不会将该触摸传播到堆栈的其余部分。我的设置:
视图A --view B(全屏容器,本身不交互但有交互子视图)----view B1(交互)----view B2(交互)--view C(与B相同)----视图C1(交互)----视图C2(交互)
B 和 C 都是全屏,但 B1/B2/C1/C2 只是屏幕的一小部分。
[a addSubview:b];
[a addSubview:c];
如果我触摸 C1/C2 之外的任何东西,我希望触摸事件然后检查它是否击中 B(B1/B2)内部的任何地方,但它只是返回到 A,然后返回到 A 的父级。是否有可能做到这一点?如果我在 C 上设置 userInteractionEnabled NO 而在 C1/C2 上设置 YES,它也不会得到任何对内部调用的调用,尽管在这种情况下,B 会按预期进行操作。
编辑:最终手动遍历视图堆栈以仅检查某些子视图而不是所有子视图:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (self != self.topCustomViewsContainer) {
for (UIView *v in self.createdSubviews) {
CGPoint newPoint = point;
newPoint.x -= v.frame.origin.x;
newPoint.y -= v.frame.origin.y;
UIView *hit = [v hitTest:newPoint withEvent:event];
if (hit)
return hit;
}
return nil;
}
return [super hitTest:point withEvent:event];
}