有关UITableView复用问题

近来用Tableview做了一个九宫格。过程中碰到了两个cell复用问题。

问题一:

在cell中为button添加addTarget点击事件时,出现后面的cell会重叠它前面cell的事件。代码如下:

static NSString *CellWithIdentifier = @"DiscoverHomeTableViewCell";
        DiscoverHomeTableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellWithIdentifier forIndexPath:indexPath];
        cell1.delegate = self;
        [cell1.btnMore addTarget:self action:@selector(btnMoreDisplay) forControlEvents:UIControlEventTouchUpInside];
        cell1.labTitle.text = @"热门";
        cell1.listExhibit = _homeVo.listExhibit;
        cell1.dType = D_TYPE_1;
        cell1.navigationController = self.navigationController;
        [cell1.tableView reloadData];
        return cell1;

经过调试确实是复用了之前cell的事件。在此用协议代理可解决这一问题,用协议来进行处理点击事件。

#pragma mark DiscoverHomeTableViewCellDelegate
- (void)ActionWithTap:(NSString *)type withData:(id)data{
    if ([type isEqualToString:D_TYPE_1]) {
        [self btnMoreDisplay];
    }
}

 

问题二:

在UITableViewCell中,进行手写代码方式添加控件,这时在cell复用时,会出现重叠控件及控件中的内容。因为每一个cell都是重新添加的,前面的cell会覆盖在后面的cell上。于是强制对cell中添加的控件进行了清空,cell复用不变,只是新的cell加载前,都会对上一个cell的内容进行清空。代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifer = @"DiscoverHomeInnerTableViewCell";
    DiscoverHomeInnerTableViewCell *cell  = [tableView dequeueReusableCellWithIdentifier:CellIdentifer forIndexPath:indexPath];
    //TODO 解决cell复用重叠问题
    for (UIView *subview in [cell.contentView subviews]) {
        [subview removeFromSuperview];
    }
   UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//button相关设置
[cell.contentView addSubview:button];
UILabel *lab = [[UILabel alloc] init];
//lab相关设置
[cell.contentView addSubview:lab];
}

 

总结:

     cell在复用时,如果手动添加控件,会有内容重叠现象出现。所在在运用时需要注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值