0

嗨,伙计们,我有一个普通的 UITableViewController,里面有一些单元格,我只有 1 个具有此属性的单元格:

cell.backgroundColor = [UIColor lightGrayColor];

它向我显示单元格上的灰色(好)。

当我使用滚动条时出现问题(我点击窗口并向下查看其他单元格)在这种情况下,单元格的灰色颜色(疯狂地)从它所在的位置移动到另一个单元格。

为什么 ??

编码:

静态 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:
4

1 回答 1

1

当您在 aUITableView中滚动时,滚动到视图之外的单元格将被重新用于滚动到视图中的单元格。这就是以下行的用途:

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

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

于 2012-05-27T10:49:49.127 回答