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; }
希望它能为你工作。