UIButtton无点击效果(添加在 tabelViewCell和 scolleView)

问题:发现在把UIButtton添加在 tabelViewCell或者 scolleView上,UIButton没有点击高亮效果.但是长按下去会看到普通的 button 效果.

分析:UIScrollView 有一个 delaysContentTouches 属性,默认为YES,touch事件会被 delay。那么把UITableView 的 delaysContentTouches 设置为 YES 应该就行了。我们知道UITableView是继承UIScrollView的.

不多说上干货解决问题:

1.写一个继承UITableView的, 和 UItableViewCell.( 大部分都是自定制写过这个的)

[self.tableView setDelaysContentTouches:NO];

2.光设置第一个会发现没有效果,原来UITableview继承自UIScrollView,大家都知道,但是UITableview下的 UITableViewWrapperView 也是继承自 UIScrollView,所以UITableViewWrapperView也要设置下。

for (UIView *view in self.tableView.subviews) {  
  if([view isKindOfClass:[UIScrollView class]]) {  
    ((UIScrollView *)view).delaysContentTouches = NO;  
    break;  
 }  
}   

3.运行程序,点击UIButton,可以高亮了,噢,好像这样子就行了。但是好像有点问题,滑动 Tableview ,手指一放到Cell上,Cell就高亮了,这样也不好吧。这是副作用啊。
继承一个 TableViewCell,重写下面的方法,就是这样,不要调用 super 方法;

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{   
}   

4.在继承自UITableView的自定义TableView当中加入以下代码:
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
if ([view isKindOfClass:[UIButton class]]) {
return YES;
}
return [super touchesShouldCancelInContentView:view];
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容