我有一个超过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];
}
答案 0 :(得分:0)
设置单元格的背景颜色将不起作用,因为还有另一个视图,其contentView位于其上方。由于iOS处理绘画画布的画布,因此contentView会阻碍您对单元格背景所做的任何更改。但是,您可以在contentView上设置背景颜色(毕竟它是UIView),您应该看到绿色和红色。
答案 1 :(得分:0)
好吧,可能是因为deQueue,您可以尝试在向您的单元格添加新子视图之前运行循环并从中删除所有子视图。确认在检查空单元格的条件后你会做什么。
for(UIView *subview in cell.subviews){
[subview removeFromSuperview];
}
可能会帮助
答案 2 :(得分:0)
您正在将数据源中的值与先前在单元格中显示的值进行比较。
这不是一个有效的比较。您将拥有类似于8或10个单元格实例的内容,这些实例已出列并重复使用。因此,您将比较单元格60的数据源与此单元格中使用的最后一个值,这可能来自第45行。这是没有意义的。
您需要将旧值存储在数据源中的某个位置,然后进行比较。