0

我有一个带有一些子视图作为图块的滚动视图。滚动视图的“延迟内容触摸”和“可取消内容触摸”设置为“是”。我用和
捕捉每个子视图中的touchesBegan触摸。 touchesEndedtouchesMoved

当您点击一个按钮并几乎立即开始滚动时,按钮突出显示并且滚动视图不会滚动,无需任何代码。

当我在不改变任何东西的情况下做同样的事情时,触摸视图但在按钮之外,这些触摸方法被触发,但滚动视图滚动。

当在按钮外部进行触摸以具有阻止滚动视图滚动的相同行为时,我可以在这些触摸方法中做什么来取消滚动?

4

3 回答 3

3

我解决了这个问题,当子视图捕获到触摸时,在 touchesBegan 和 touchesEnded 中添加此代码。

UIView* superView = self.view.superview;
while (superView != nil) {
    if ([superView isKindOfClass:[UIScrollView class]]) {
        UIScrollView* superScroll = (UIScrollView*)superView;
        superScroll.scrollEnabled = YES/NO; // put the right value depending on the touch method you are in
    }

    superView = superView.superview;
}
于 2013-07-07T10:55:28.097 回答
0

根据您要执行的操作,也许您可​​以添加:

UILongPressGestureRecognizer *longPressDetect = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(disableScrolling:)];

[subView addGestureRecognizer:longPressDetect];

然后添加一个禁用和重新启用滚动视图滚动的方法,例如:

-(void)disableScrolling:(UILongPressGestureRecognizer*)longPress {

    if (gesture.state == UIGestureRecognizerStateBegan) {
        scrollView.scrollEnabled = NO;
    }

    if (gesture.state == UIGestureRecognizerStateEnded) {
        scrollView.scrollEnabled = YES;
    }
}
于 2013-07-07T05:16:02.313 回答
0

如果要检测 UIScrollView 的任何子视图内的触摸,则必须继承 UIScrollView 并覆盖为此目的专门创建的 touchesShouldBegin 和 touchesShouldCancelInContentView 方法。

除此之外,您无法识别子视图中的触摸,因为 UIScrollView 倾向于自行处理所有触摸并且不会将它们传递给其子视图。

礼貌:- https://stackoverflow.com/a/392562/1865424

如果您对此有任何进一步的问题。很乐意为您提供帮助。

于 2013-07-07T04:29:05.520 回答