如何在UIScrollView的superview中检测“Touch Down”?

时间:2010-04-07 21:44:41

标签: ios objective-c uiview uiscrollview touch-event

我有UIView,其中包含UIScrollView,我希望能够在用户点击{{1}时随时捕获UIView中的“Touch Down”事件}}

我已尝试在UIScrollView中包含所有touchesBegan / Ended / Cancelled处理程序,但在点击主UIViewController中包含的UIScrollView内时,这些处理程序都不会被触发。

实现这一目标的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

在UIView中,实现touchesBegan:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // assign a UITouch object to the current touch
    UITouch *touch = [[event allTouches] anyObject];

    // if the view in which the touch is found is myScrollView
    // (assuming myScrollView is the UIScrollView and is a subview of the UIView)
    if ([touch view] == myScrollView) {
        // do stuff here
    }
}

附注:确保UIView中的userInteractionEnabled设置为YES。

答案 1 :(得分:1)

您还可以在UIView子类中实现hitTest:withEvent:。调用此方法以确定哪个子视图应该接收触摸事件。因此,您可以在此处跟踪通过视图的所有事件,也可以隐藏子视图中的某些事件。在这种情况下,您可能不需要为滚动视图禁用用户交互。

UIView类引用中查看有关此方法的更多详细信息。

答案 2 :(得分:1)

您还可以为超级视图添加手势识别器。 例如,如果您需要激活/停用覆盖滚动视图的按钮等内容,请使用点击手势:

self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease];
tap.numberOfTapsRequired = 1;

["containerView" addGestureRecognizer:tap];

手势确实保留滚动视图交互

答案 3 :(得分:-3)

您需要使用滚动视图禁用用户交互......

scrollView.userInteractionEnabled = NO;

一旦禁用,UIScrollView的superview将获取touchesBegan事件。