美文网首页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