滚动时UITableViewController和UIColor更改位置

时间:2012-05-27 10:42:08

标签: ios uitableview uicolor

大家好我有一个普通的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:

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];

如果您需要灰色背景,则颜色稍后会再次变为灰色。