tableview 自定义cell 点击cell改变cell中的label.text的字体颜色,cell复用出现问题

时间:2021-05-19 10:43:41
如题,在tableview里,自定义了cell ,当点击cell后改变cell中的label.text的字体颜色(通过didSelectRowAtIndexPath:方法改变cell中的label.text的颜色)
但是,cell在复用的时候,有可能下面的cell用了缓存池里的cell,恰好cell是颜色是之前被改过的。
有没有其他的好办法,解决这个问题?

3 个解决方案

#1


可以清除cell内容,如下:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier=@"order_cell";
    _cell = (OrderCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    
    if(_cell==nil)
    {
        _cell=[[OrderCell alloc]initWithStyle: UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

    }else
    {
        while ([_cell.contentView.subviews lastObject]!=nil) {
            [(UIView *)[_cell.contentView.subviews lastObject] removeFromSuperview];
        }
    }
    
    [_cell updateCell:[_orderArray objectAtIndex:indexPath.section] withRow:indexPath.section];
    //_pn(indexPath.section);
    _cell.delegate=self;
    _cell.selectionStyle = UITableViewCellSelectionStyleNone;
    _cell.backgroundColor = [UIColor whiteColor];
    
    return _cell;
}

#2


可以清除cell内容,如下:

#3


我的建议是在cell中扩展出一个属性如isSelected , 点击时更改这个属性的状态。在cell 生成时,也可根据这个状态来判断uilabel的显示颜色。

#1


可以清除cell内容,如下:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier=@"order_cell";
    _cell = (OrderCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    
    if(_cell==nil)
    {
        _cell=[[OrderCell alloc]initWithStyle: UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

    }else
    {
        while ([_cell.contentView.subviews lastObject]!=nil) {
            [(UIView *)[_cell.contentView.subviews lastObject] removeFromSuperview];
        }
    }
    
    [_cell updateCell:[_orderArray objectAtIndex:indexPath.section] withRow:indexPath.section];
    //_pn(indexPath.section);
    _cell.delegate=self;
    _cell.selectionStyle = UITableViewCellSelectionStyleNone;
    _cell.backgroundColor = [UIColor whiteColor];
    
    return _cell;
}

#2


可以清除cell内容,如下:

#3


我的建议是在cell中扩展出一个属性如isSelected , 点击时更改这个属性的状态。在cell 生成时,也可根据这个状态来判断uilabel的显示颜色。