0

我有一个包含 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];
}
4

3 回答 3

0

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

于 2012-04-05T19:29:33.473 回答
0

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

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

可能有帮助

于 2012-04-05T19:37:28.523 回答
0

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

这不会是一个有效的比较。您将拥有大约 8 或 10 个单元格实例,这些实例已出列并重用。因此,您将比较单元格 60 的数据源与该单元格中使用的最后一个值,该值可能来自第 45 行。这是没有意义的。

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

于 2012-04-05T21:04:56.463 回答