我有一个UIView
包含 aUIScrollView
并且我希望能够UIView
在用户点击UIScrollView
.
我已经尝试在我的中包含所有的 touchesBegan/Ended/Cancelled 处理程序,但是当点击mainUIViewController
中包含的内容时,它们都不会被触发。UIScrollView
UIView
实现这一目标的最佳方法是什么?
我有一个UIView
包含 aUIScrollView
并且我希望能够UIView
在用户点击UIScrollView
.
我已经尝试在我的中包含所有的 touchesBegan/Ended/Cancelled 处理程序,但是当点击mainUIViewController
中包含的内容时,它们都不会被触发。UIScrollView
UIView
实现这一目标的最佳方法是什么?
在 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。
你也可以hitTest:withEvent:
在你的 UIView 子类中实现。调用此方法以确定哪个子视图应接收触摸事件。所以在这里你可以要么只跟踪通过你的视图的所有事件,要么隐藏子视图中的一些事件。在这种情况下,您可能不需要禁用滚动视图的用户交互。
UIView
在类参考中查看有关此方法的更多详细信息。
您还可以将手势识别器添加到您的超级视图。例如,如果您需要激活/停用诸如覆盖滚动视图的按钮之类的东西,请点击手势:
self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease];
tap.numberOfTapsRequired = 1;
["containerView" addGestureRecognizer:tap];
手势确实保留了滚动视图交互
您需要禁用用户与滚动视图的交互......
scrollView.userInteractionEnabled = NO;
一旦被禁用,UIScrollView 的超级视图就会获得 touchesBegan 事件。