问题:
在UITableView 或者 UIScrollView 中添加UIbutton,点击Button后,事件有延迟,大概150ms左右,用起来特别的变扭。
原因:
应为UIScrollView 和 UIButton 的事件存在冲突导致的,要先相应scrollview的事件后,在传递给button。
解决:
1、设置是否延时传递给内部组件
self.delaysContentTouches = NO;
工作原理其实有一个属性开关来控制:delaysContentTouches。默认值为YES;如果设置为NO,则无论手指移动的多么快,始终都会将触摸事件传递给内部控件;设置为NO可能会影响到UIScrollView的滚动功能。
2、设置返回值为YES
-(BOOL)touchesShouldCancelInContentView:(UIView *)view
{
[super touchesShouldCancelInContentView:view];
return YES;
}
意思就是当UIScrollView将touch事件交给子view后,当手指发生滑动时,调用此方法,假如返回NO,则将touch事件交给子view,如果返回YES,则交给UIScrollView处理,产生滑动。(但是前提是UIScrollView的canCancelContentTouches属性是YES才会调用这个方法,只要不是UIControll的子类,这个属性默认是YES。)所以只要重写UIScrollView的这个方法并返回YES就可以啦,到此问题就解决了。既能立即响应UIButton,也能自由滑动UIScrollView。
网友评论