美文网首页iOS 解决方案
IOS - UIScrollView 与 UIButton 点击

IOS - UIScrollView 与 UIButton 点击

作者: 囧rg | 来源:发表于2017-05-19 18:36 被阅读2496次

问题:
在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。

相关文章

网友评论

    本文标题:IOS - UIScrollView 与 UIButton 点击

    本文链接:https://www.haomeiwen.com/subject/qfwyxxtx.html