我有UIView
,其中包含UIScrollView
,我希望能够在用户点击{{1}时随时捕获UIView
中的“Touch Down”事件}}
我已尝试在UIScrollView
中包含所有touchesBegan / Ended / Cancelled处理程序,但在点击主UIViewController
中包含的UIScrollView
内时,这些处理程序都不会被触发。
实现这一目标的最佳方法是什么?
答案 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事件。