我有一个都具有用户互动栏目(儿童)和所有全屏子视图的堆栈。 问题是,如果我降落在在堆栈的顶部的非交互部分,它不会再传播整个堆栈的其余部分是触摸。 我的设置:
视图A --view B(全屏幕的容器,而不是本身交互但具有交互式子视图)----视图B1(交互式)----视图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的母公司。 是否有可能做到这一点? 如果我设置userInteractionEnabled NO在C,但在是C1 / C2,它不会给那些内任何电话或者,虽然在这种情况下,则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];
}