解决 按钮响应延时[UIScrollView 和 UITableViewCell 中的子视图触摸事件延时]

转载 2016年06月01日 10:57:44

概括:总的来说,就是你需要重写你的滚动视图 或者UITableViewCell类,实例代码在文章末尾。


        场景:一个按钮放在UIScrollView里 或者 UITableViewCell里时,点击按钮 发现按钮的高亮状态延时,如果迅速的触摸一下按钮 甚至不回看到按钮的高亮状态。

        原因:UIScrollView:

1、属性delaysContentTouches,布尔类型,默认值为YES。值为YES时,UIScrollView会在接收到手势时延迟150ms来判断该手势是否能够出发UIScrollView的滑动事件;值为NO时,UIScrollView会立马将接收到的手势分发到子视图上。
(注:仅仅设置这个是不够的,你会发现如果想要拖动scrollView而起点落在其他有手势识别的视图上时会拖不动)
2、方法- (BOOL)touchesShouldCancelInContentView:(UIView *)view,此方法的重载是帮助我们完美解决问题的重点,决定手势是否取消传递到view上,拖动ScrollView时触发。返回NO时,拖动手势将留在ScrollView上,返回YES则将手势传到view上。(若view是UIControl,则默认返回YES)


UITableView:
不得不说,UITableView(包括UITableViewCell在内)在iOS7和iOS8中的视图结构是不同的,且存在着很多我们在编码时永远接触不到的视图,但我们可通过Debug将其subviews逐个逐个找出来。这关系到我们这个问题坑比较深的层次。
iOS7:UITableView中存在n+1个UIScrollView,一个是UITableView本身,另外n个存在于UITableViewCell与cell的contentView之间,类名为UITableViewCellScrollView,活的不久,仅存在于iOS7中,在iOS8中已被移除。
iOS8:UITableView中存在2个UIScrollView,一个是UITableView本身,另外一个存在于UITableView与UITableViewCell之间,类名为UITableViewWrapperView。需要注意的是,UITableViewWrapperView在iOS7中并不是一个UIScrollView。


解决办法:

1、将UIButton所有属于UIScrollView的父视图的delaysContentTouches属性设置成为NO。
      2、继承UIScrollView或UITableView,并重写- (BOOL)touchesShouldCancelInContentView:(UIView*)view方法,让其响应拖动方法。


demoCodes:

自定义一个UIScrollView

- (instancetype)initWithFrame:(CGRect)frame

{

    if (self = [superinitWithFrame:frame])

    {

        self.delaysContentTouches =NO;//禁止滑动延时

        

    }

    returnself;

    

}


//重载

- (BOOL)touchesShouldCancelInContentView:(UIView *)view

{

    if ([viewisKindOfClass:[UIButtonclass]])

    {

        returnYES;

    }

    return [supertouchesShouldCancelInContentView:view];

    

}

UITableViewCell 的实例代码也是一样的。


文章参考自:http://blog.csdn.net/hyugahinat/article/details/46291813

相关文章推荐

UItableView 点击cell跳转到其它界面延迟bug

最近在做项目等时候遇见一个bug,点击UITableView的Cell跳转到其他界面,经常会有延时,有时四五秒,有时会有十几秒。 查看网上也没有什么详细的介绍。iOS群里问也没有问出正确的答案。最后让...

UITableView点击cell时有延迟的解决办法

UITableview一直是按照原来的方法做的,不知道为什么新建的这个tableview点击cell时,延迟了1秒左右,我就以为是 didSelectRowAtIndexPath里面做的操作太多导致的...

UITableViewCell的高亮和选中状态

查看UITableViewCell的帮助文档我们可以看到它有两个属性highLighted、selected。 这两者之间到底又怎么样的联系呢?当我们点击cell的时候都发生了什么呢? 要达到这个...

UITableView UITableViewCell点击时,子view背景色消失

在自定义cell时经常会遇到给view添加背景色,但是点cell后,所有的背景色都变成cell的高亮颜色了 例如在cell中添加一个label设置label的背景色,点击后效果如下 解决办法:...

UIView添加手势 然后UITableView 添加进这个View 导致UITableView 的单元格点击事件无效

#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (v...

UITableViewCell上的按钮点击事件处理

UITableViewCell上的按钮点击事件处理

cocos2dx 3.2 解决触摸事件中两个按钮同时响应的问题

上篇触摸机制讲解中提到过存在两个按钮同时响应的问题。

Android延时启动效果+轮播图+点击进入+沉浸式状态栏+按钮点击颜色渐变效果+好看的UI框架

最近发现Android产品要想拿得出手,除了稳定实用的功能,好看的UI必不可少。 废话不都说,为大家介绍几种常见的Android显示效果。 首先是延时启动效果,主要表现就是点击进去之后...

关于鼠标hover事件及延时

一、关于鼠标hover事件及延时 鼠标经过事件为web页面上非常常见的事件之一。简单的hover可以用CSS :hover伪类实现,复杂点的用js。 一般情况下,我们是不对鼠标hover事...

[译]消除iphone中onClick事件延时

在iphone上的webkit内核包括safari开发时会遇到一个很奇怪的问题,onclick事件会有延时,时间大约是300ms。可能是由于设备需要用它来判断用户是不是在使用手势。对于一般的网站来说问...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)