Ios 颜色不';UITableViewCells中的t变化

Ios 颜色不';UITableViewCells中的t变化,ios,uitableview,Ios,Uitableview,我有一个超过200个细胞的UITable。该表与来自网络的数据完美结合。现在我需要添加一种方法来更改标签的背景颜色,以与数据匹配(如果值减小,则为红色,如果值增大,则为绿色)。这在开始时似乎很有效,但一段时间后,即使值更新良好,颜色也会变得静态。下面是layoutSubviews方法中的代码示例: 更新 我已更新代码以显示我的表。请注意,数据被分配到单元格时非常好。无论数值是什么,几分钟后单元格的颜色都不会改变 - (UITableViewCell *)tableView:(UITableVie

我有一个超过200个细胞的UITable。该表与来自网络的数据完美结合。现在我需要添加一种方法来更改标签的背景颜色,以与数据匹配(如果值减小,则为红色,如果值增大,则为绿色)。这在开始时似乎很有效,但一段时间后,即使值更新良好,颜色也会变得静态。下面是layoutSubviews方法中的代码示例:

更新

我已更新代码以显示我的表。请注意,数据被分配到单元格时非常好。无论数值是什么,几分钟后单元格的颜色都不会改变

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        UILabel* label = [[UILabel alloc] initWithFrame:self.contentView.bounds];
        label.tag = 1;
        [cell.contentView addSubview:label];
        [label release];
    }
    UILabel *label = (UILabel*)[cell viewForTag:1];
    float value = [label.text floatValue];
    float newValue = [dataSource objectAtIndex:indexPath.row];

    // Get the current value of the cell and compare it with the new value
    if(value < newVal)
    {
        label.backgroundColor = [UIColor greenColor];
    }
    else if(value > newVal)
    {
        label.backgroundColor = [UIColor redColor];
    }
    label.text = [NSString stringWithFormat:@"%d", newValue];
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
静态NSString*CellIdentifier=@“Cell”;
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格==nil){
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier]自动释放];
UILabel*label=[[UILabel alloc]initWithFrame:self.contentView.bounds];
label.tag=1;
[cell.contentView addSubview:label];
[标签发布];
}
UILabel*标签=(UILabel*)[单元格视图FORTAG:1];
浮点值=[label.text floatValue];
float newValue=[dataSource objectAtIndex:indexath.row];
//获取单元格的当前值,并将其与新值进行比较
if(值新值)
{
label.backgroundColor=[UIColor redColor];
}
label.text=[NSString stringWithFormat:@“%d”,newValue];
}

设置单元格的背景色将不起作用,因为还有另一个视图,它的contentView,位于该视图之上。由于iOS像画家的画布一样处理绘图,因此contentView会阻止您对单元格背景所做的任何更改。但是,您可以在contentView(毕竟是UIView)上设置背景色,您应该可以看到绿色和红色。

这可能是因为出列,您可以尝试在向单元格添加新子视图之前运行循环并从中删除所有子视图。确保在检查空单元格的条件后执行此操作

for(UIView *subview in cell.subviews){
  [subview removeFromSuperview];
} 

可能有帮助

您正在将数据源中的值与以前在单元格中显示的值进行比较

这不是一个有效的比较。您的计算单元总共有8或10个实例,这些实例将被排队并重新使用。因此,您将比较单元格60的数据源与此单元格中使用的最后一个值,该值可能来自第45行。这是毫无意义的


您需要将旧值存储在数据源中的某个位置,并与之进行比较

为什么此代码在LayoutSubView中?不是每次都会打电话。它应该在cellForRowAtIndexPath中。在阅读了下面的答案后,我将代码移到了正确的位置。谢谢你的注意。虽然我可以看到颜色,但我得到的问题与最初提到的相同。过了一段时间,颜色似乎不再更新。我试着滚动看看这是否有帮助,但无论设置的值是什么,相同的单元格总是被设置为相同的颜色。创建字典并存储行索引和旧值会起作用吗?这样,当我再次进行比较时,我可以根据需要的行从字典中提取旧值?是的,或者您的数据源可以是一个字典数组,每个字典都有两个键,旧值和新值。似乎就是这样。感谢您的帮助,并对UITableViewCell进行了更深入的介绍。我知道这些细胞是重复使用的,但我不明白的是为什么我们看到的细胞会被重复使用。