ios 8 – 水平滚动视图中的button拦截泛事件 – 滚动不起作用

我有一个button的水平滚动视图。 滚动视图不会滚动,除非我做一个非常快的滑动。

如果我将button设置为userInteractionEnabled = NO,那么滚动按预期工作,但当然,这些button根本不起作用。

这个应用程序在iOS 7和以前工作正常。 这似乎是一个iOS 8的“function”。 我注意到我可以捕获button的拖动事件,但我不知道如何将其redirect回滚动视图。

我想我需要用UIViewsreplace我的button,并且自己pipe理事件,但是如果有人有其他的想法或者解决scheme,我会很感激。

我发现,在iOS 8中,UIScrollView的底层UIPanGestureRecognizer不尊重UIScrollView的delaysContentTouches属性。 我认为这是一个iOS 8的错误。 这是我的解决方法:

 theScrollView.panGestureRecognizer.delaysTouchesBegan = theScrollView.delaysContentTouches 

我有一个UITableView与UIButtons自定义UITableViewCells上有这个问题。 我把它放在我的UITableview类中。

 - (BOOL)touchesShouldCancelInContentView:(UIView *)view { return YES; } 

解决了我的问题。

编辑:只是为了clearify,你可以创build一个UIScrollview的子类,并添加这个来解决这个问题。

这黑客为我工作:

 UITapGestureRecognizer *nothingTap = [[UITapGestureRecognizer alloc] init]; nothingTap.delaysTouchesBegan = YES; [_scrollView addGestureRecognizer:nothingTap]; 

信用: https : //devforums.apple.com/thread/241467

我做了一个UIScrollView的子类来解决这个问题。 你只需要这个方法:

 - (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view { UITouch *touch = [touches anyObject]; if(touch.phase == UITouchPhaseMoved) { return NO; } else { return [super touchesShouldBegin:touches withEvent:event inContentView:view]; } } 

然后,只要记得在故事板中将类设置为你的子类,如果你使用了一个,那么你就可以走了。

我有同样的问题,我解决了它通过创buildUIScrollView的子类,并将它的cancelContentTouches值设置为TRUE和它的工作正常。

 - (BOOL)touchesShouldCancelInContentView:(UIView *)view { return YES; } 

希望它能为你工作。