今天在项目里需要用到UITableView + tableHeaderView布局。我先自定义了一个tableHeaderView,继承UView,然后自定义各种控件,写完发现UITableViewCell的布局跟tableHeaderView是一样的。于是,我很自然的就想到了直接让tableHeaderView继承UITableViewCell,写完测试一下,不错,显示没问题。
但是问题来了,UITableViewCell上面的点击事件莫名其妙的就无效了。
想了老半天没想明白,为什么先创建一个view再继承UITableViewCell,点击事件就无效了呢?
于是,
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(imageViewClick:)];
[imageview addGestureRecognizer:tap];
tap.delegate = self;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
QPLog(@"touch.view=%@",NSStringFromClass([touch.view class]));
return YES;
}
打印出来发现,touch.view= UITableViewCellContentView.
原来UITableViewCell 默认有个子视图 contentView的。
而我一开始创建的tableHeaderView上面是没有contentView的,然后布局好子控件后去再继承UITableViewCell,导致tableHeaderView上面的子控件不在contentView上。
这样就造成了点击tableHeaderView上面的子控件,事件只传递到contentView,所以,就点击无效了。
想到了如下的解决办法:
1.把tableHeaderView上的子控件移到self.contentView上,结果发现布局错乱,不行。
网友评论