在UITableViewCell 中的UIButton 点击没有高亮

问题描述:

放置了一个UIButton到UITableViewCell当中,点击UIButton,UIButton没有高亮

问题分析:

可以确定的是,UIScrollView 有一个 delaysContentTouches 属性,默认为YES,touch事件会被 delay。
那么把UITableView 的 delaysContentTouches 设置为 YES 应该就行了。

解决方案:

准备工作:
要自定义一个TableView,继承自UITableView
要自定义一个TableViewCell,继承自UITableViewCell
第一步:
    [self.tableView setDelaysContentTouches:NO];
结果:会发现没有效果,原来UITableview继承自UIScrollView,这大家都知道,但是UITableview下的 UITableViewWrapperView 也是继承自 UIScrollView,所以看第二步。
第二步:
把UITableView的UITableViewWrapperView也设置一下 delaysContentTouches
    for (UIView *currentView in self.tableView.subviews) {
        if([currentView isKindOfClass:[UIScrollView class]]) {
            ((UIScrollView *)currentView).delaysContentTouches = NO;
            break;
        }
    }
结果:运行程序,点击UIButton,可以高亮了,噢,好像这样子就行了。
但是好像有点问题,滑动 Tableview ,手指一放到Cell上,Cell就高亮了,这样也不好吧。这是副作用啊。

第三步:
继承一个 TableViewCell,重写下面的方法,就是这样,不要调用 super 方法;
    - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
        
    }
结果:嗯,Button点击高亮,Cell点击高亮,滑动TableView也正常,好像也可以了。
但是好像还有点问题,按住Button,滑动,只是Button的状态变化了,TableView并没有滑动。
这个是你想要的吗?如果不是,请往下看。
第四步:
在继承自UITableView的自定义TableView当中加入以下代码:
    - (BOOL)touchesShouldCancelInContentView:(UIView *)view {
        if ([view isKindOfClass:[UIButton class]]) {
            return YES;
        }
        return [super touchesShouldCancelInContentView:view];
    }
结果:这下真的好了,貌似一切都正常了。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值