问题:发现在把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];
}