在UIScrollView内检测UIView上的触摸,最好禁用交互。

3
我有一个包含一些UIView的UIScrollView。我的目标是当UIView被触摸/释放触摸时捕获触摸事件。 我遇到的问题是UIScrollView似乎吞噬了所有的触摸事件,尤其是当你在一个UIView上按住太久时。 我希望UIScrollView在自动滚动时禁用用户交互,这是否可行? 我已经尝试对UIViews进行子类化,但其中触摸事件从未被调用。
2个回答

4
您可以通过以下方式将tapGesture附加到您的scrollview上:
   UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureUpdated:)];
   tapGesture.delegate = self;
   tapGesture.numberOfTapsRequired = 1;
   tapGesture.numberOfTouchesRequired = 1;
   [self addGestureRecognizer:_tapGesture];

那么在你的- (void)tapGestureUpdated:(UITapGestureRecognizer *)tapGesture方法中,你需要负责确定触摸位置并找出是否有一个子视图被选中。然后你可以调用委托上的方法来通知特定视图已被触摸。


这个方法只会被调用一次吗?我想知道触摸UIView的时间长度,因此需要touchStart和touchEnd事件。 - Darren
tapGesture参数有一个状态,例如UIGestureRecognizerStateBegan或UIGestureRecognizerStateEnd,我会使用它来检测您感兴趣的两个触摸事件。 - tiguero
请确保您阅读了有关tapgesture的官方文档:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html#//apple_ref/occ/cl/UIGestureRecognizer - tiguero
谢谢,我明天早上会尝试这种方法。 - Darren

1

也许您可以重新排列视图,使具有触摸识别器对象的视图是应用程序识别的。将其在文档大纲中移至顶部(滚动视图)。


我确实考虑过这个问题,但我认为让UIView与滚动视图以相同的速度移动会非常困难。 - Darren
@Darren 嗯,那么一个设置为自定义并且背景透明度设置为0.0的UIButton怎么样?此外,如果您添加一个UIView,它不一定要随UIScrollView一起移动... - jpcguy89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接