我不太了解修改响应器链的细节,所以如果这是愚蠢的,请不要抨击我;)
基本上,我有两个视图堆栈(蓝色)作为父视图(红色)的子视图
它们都在某个时间点占据了父视图的整个帧,所以很明显,只有顶部的那个会获得触摸事件,这些事件会向上传播到父视图(红色)并继续到窗口。
在某些情况下,我希望触摸输入由“其他”视图堆栈的合格子视图拾取。也就是说,如果当前最顶层的视图已将userinteractionenabled设置为no,则将接收这些输入的视图。
设置userinteractionenabled是可行的,但我觉得这是一个肮脏的技巧。要点是这个topmot视图基本上是透明的,我希望当事件在指定的区域中被触摸时,会在另一个堆栈中结束。
这是一张有助于视觉解释的图片,请记住,这两种蓝色视图都是100%的父视图。
http://c.crap.ps/35a5
发布于 2010-11-04 04:27:11
您可以覆盖每个视图中的hitTest:withEvent:,以控制谁可以“使用”触摸。
在您的示例中,我假设绿色区域是您希望使用触摸事件的子视图。如果是这样,那么对hitTest方法尝试如下所示:
-(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *hitView = [super hitTest:point withEvent:event];
return (hitView == self) ? nil : hitView;
}此方法检查触摸是否命中任何子视图。如果是,则让该子视图使用触摸,否则让触摸在层次结构中继续。
https://stackoverflow.com/questions/4090769
复制相似问题