美文网首页
UITableViewCell中的contentView的坑

UITableViewCell中的contentView的坑

作者: lymdd | 来源:发表于2018-01-26 16:21 被阅读0次

    今天在项目里需要用到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上,结果发现布局错乱,不行。

    2.初始化时  把contentView 移除了 [self.contentView removeFromSuperview]  问题解决。

    相关文章

      网友评论

          本文标题:UITableViewCell中的contentView的坑

          本文链接:https://www.haomeiwen.com/subject/bwkwaxtx.html