7

我有一个UIView包含 aUIScrollView并且我希望能够UIView在用户点击UIScrollView.

我已经尝试在我的中包含所有的 touchesBegan/Ended/Cancelled 处理程序,但是当点击mainUIViewController中包含的内容时,它们都不会被触发。UIScrollViewUIView

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

4

4 回答 4

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。

于 2010-04-08T03:00:02.770 回答
1

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

UIView在类参考中查看有关此方法的更多详细信息。

于 2010-04-08T07:52:01.493 回答
1

您还可以将手势识别器添加到您的超级视图。例如,如果您需要激活/停用诸如覆盖滚动视图的按钮之类的东西,请点击手势:

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

["containerView" addGestureRecognizer:tap];

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

于 2012-02-23T10:26:56.283 回答
-3

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

scrollView.userInteractionEnabled = NO;

一旦被禁用,UIScrollView 的超级视图就会获得 touchesBegan 事件。

于 2010-04-08T07:31:04.083 回答