问题描述:
在UIScrollView中加入UIButton后,在button区域无法进行滑动操作,有时候我们可能希望在button在响应点击事件的同时,还要支持UIScrollView的滑动手势,以达到更好的用户体验。经过研究实践,总结了以下2种实现方式:
方法一:
使用UILabel,添加TapGestureRecognizer替代Button的点击事件
此方法最简便快捷,此处不再贴出代码了
方法二:
继承UIScrollView,重写
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
[super touchesShouldCancelInContentView:view];
//NO UIScrollView不可以滚动, YES UIScrollView可以滚动
return YES;
}
方法,对event事件做过滤,需配合UIScrollView的canCancelContentTouches属性使用。
详细描述:
当UIScrollView将touch事件交给子view后,当手指发生滑动时,调用此方法,假如返回NO,则将touch事件交给子view,如果返回YES,则交给UIScrollView处理,产生滑动。(但是前提是UIScrollView的canCancelContentTouches属性是YES才会调用这个方法,只要不是UIControll的子类,这个属性默认是YES。)所以只要重写UIScrollView的这个方法并返回YES就可以啦,到此问题就解决了。既能立即响应UIButton,也能自由滑动UIScrollView。
网友评论