2010-04-06 47 views
2

我在UIScrollView中有一个视图,当用户按下某个区域时会加载一个附加子视图。当这个附加的子视图可见时,我希望所有的触摸事件都由此处理 - 而不是滚动视图。将触摸事件传递给子视图

看起来好像第一对夫妇的事件正在被子视图处理,但接着调用touchesCancelled并且滚动视图接管了触摸检测。

只要在该视图上执行移动活动,我怎样才能确保子视图获取所有事件?

这是我在touchesMoved实施 - 而且我认为他会做的工作......

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[touches allObjects] objectAtIndex:0]; 
    CGPoint touchPt = [touch locationInView:self]; 

    UIView *hitView = [self hitTest:touchPt withEvent:event]; 
    UIView *mySubView = subviewCtrl.view; 

    if(hitView == mySubView) { 
     [subviewCtrl.view touchesMoved:touches withEvent:event]; 
    } 
    else { 
     NSLog(@"Outside of view..."); 
    } 
} 

回答

1

响应链层次从子视图“正常”变为上海华盈,所以你不应该需要做的hitTest在你的超级视图中。你遇到的问题不是你需要superview来调用子视图上的touchesMoved,而是UIScrollView通过拦截触摸事件来颠覆正常的响应者链层次结构,以便为用户提供平滑的滚动体验。

[scrollView setDelaysContentTouches:NO]; 

注意,这将确保您的子视图具有善于处理问题的事件第一次破裂:如果你不希望这种行为,那么你可以通过发送以下消息禁用了滚动此行为(只要它实际上是第一响应者)。这可能会对scrollView的滚动和缩放性能产生负面影响,然而,这可能是苹果默认将其设置为YES的原因。

相关问题