我有一个带有一些子视图的scrollview作为tile。 scrollview将其“Delays content touches”和“Cancellable Content Touches”设置为YES
我使用touchesBegan
,touchesEnded
和touchesMoved
捕获每个子视图中的触摸。
当您点按一个按钮并且几乎立即开始滚动时,该按钮会突出显示并且滚动视图不会滚动,无需任何代码。
当我完全相同的事情而不改变任何东西时,触摸视图但在按钮外部,触发这些触摸方法,但滚动视图滚动。
如果在按钮外部完成触摸以取消滚动操作以阻止滚动视图滚动,我可以在触摸方法中取消滚动操作吗?
答案 0 :(得分:2)
我解决了这个在touchesBegan中添加此代码,并在子视图捕获触摸时触摸了触摸。
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;
}
答案 1 :(得分:0)
如果要检测UIScrollView的任何子视图内的触摸,则必须子类化UIScrollView并覆盖为此目的专门创建的touchesShouldBegin和touchesShouldCancelInContentView方法。
除此之外,您无法识别子视图中的触摸,因为UIScrollView倾向于自己处理所有触摸并且不会将它们传递给其子视图。
提供者: - https://stackoverflow.com/a/392562/1865424
如果您对此有任何进一步的问题。快乐帮助您。
答案 2 :(得分:0)
根据您的目的,您可以添加:
UILongPressGestureRecognizer *longPressDetect = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(disableScrolling:)];
[subView addGestureRecognizer:longPressDetect];
然后添加一个方法,禁用并重新启用scrollView,例如:
-(void)disableScrolling:(UILongPressGestureRecognizer*)longPress {
if (gesture.state == UIGestureRecognizerStateBegan) {
scrollView.scrollEnabled = NO;
}
if (gesture.state == UIGestureRecognizerStateEnded) {
scrollView.scrollEnabled = YES;
}
}