大家好我有一个普通的UITableViewController里面有一些单元格, 我只有一个有这个属性的单元格:
cell.backgroundColor = [UIColor lightGrayColor];
它显示了一个细胞上的灰色(好)。
问题出现在我使用滚动条时,(我点击窗口然后我向下看 在这种情况下,细胞的灰色颜色(疯狂地)从它所在的位置移动 到另一个牢房。
为什么??
代码:
static NSString * CellIdentifier = @“Cell”;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if(cell.backgroundColor == [UIColor lightGrayColor])
{
cell.backgroundColor = [UIColor lightGrayColor];
}
else
{
cell.backgroundColor = [UIColor clearColor];
}
switch (currentStatus) {
case KBI_NAME:
{
switch (indexPath.section) {
case 0:
{
if(indexPath.row == 0)
{
if (currentUser.currentKBI != nil && ![currentUser.currentKBI isEqualToString:@""]) {
cell.textLabel.text = currentUser.currentKBI;
}
else{
cell.textLabel.text = @"asdf";
}
cell.userInteractionEnabled = NO;
cell.backgroundColor = [UIColor lightGrayColor];
}
if(indexPath.row == 1)
{
cell.textLabel.text = @"xyz";
cell.textLabel.textAlignment = UITextAlignmentCenter;
}
break;
}
case 1:
答案 0 :(得分:1)
当您在UITableView
中滚动时,滚动到视图中的单元格将重新用于滚动到视图的单元格。这就是以下行:
cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
因此,如果此行返回一个单元格,则需要每次都设置背景颜色,因为您可能已经获得了灰色背景的单元格。
if (isGrayCell)
cell.backgroundColor = [UIColor lightGrayColor];
else
cell.backgroundColor = [UIColor clearColor];
<强>更新强>
您设置背景颜色的代码没有意义。如果回收的单元格具有灰色背景,即使您需要不同的颜色,也可以将其再次设置为灰色。那些看起来应该是这样的:
if(currentStatus == KBI_NAME && indexPath.row == 0)
{
cell.backgroundColor = [UIColor lightGrayColor];
}
else
{
cell.backgroundColor = [UIColor clearColor];
}
更新2
如果您每次只是简单地初始化单元格,那可能会容易得多:
cell.backgroundColor = [UIColor clearColor];
如果您需要灰色背景,则颜色稍后会再次变为灰色。