UIButton高亮状态卡顿

童鞋们有么有遇到过一个tableview或者是scrollview上放置一个button然后点击button,但是button的高亮状态切换不过来呢?

 

解决方案:

新建一个类继承自UITableView或者UIScrollView,然后

(1)tableview

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{

    if (self = [super initWithFrame:frame style:style])

    {

        self.delaysContentTouches = NO;

        

        for (id view in self.subviews)

        {

            if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])

            {

                if ([view isKindOfClass:[UIScrollView class]])

                {

                    UIScrollView * scroll = (UIScrollView *)view;

                    scroll.delaysContentTouches = NO;

                }

                break;

            }

        }

    }

    

    return self;

}

 

- (BOOL)touchesShouldCancelInContentView:(UIView *)view

{

    if ([view isKindOfClass:[UIButton class]])

    {

        return YES;

    }

    return [super touchesShouldCancelInContentView:view];

}

 

(2)scrollView

- (id)initWithFrame:(CGRect)frame{

    if (self = [super initWithFrame:frame])

    {

        self.delaysContentTouches = NO;

    }

    

    return self;

}

 

 

- (BOOL)touchesShouldCancelInContentView:(UIView *)view

{

    if ([view isKindOfClass:[UIButton class]])

    {

        return YES;

    }

    return [super touchesShouldCancelInContentView:view];

}

 

如果用到tableview或者scrollView的话让他继承自这个新建的类即可。

 

(2)扩充:

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。

                                                                                                -------------------感谢app dealloc的分享

转载于:https://www.cnblogs.com/danMing-love/p/6520187.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值