0

我正在创建正在使用Core DataUITableViewControllers显示MEL列表的应用程序。

我已经做了所有事情,但我无法接受检查是否UITableViewCell应该是可编辑的。这是我的应用程序的屏幕截图,它应该可以帮助您想象我的问题:

在此处输入图像描述

我正在检查是否chapter有任何部分。如果这是真的,它将以黑色显示所有内容,如果不是,则将detailTextLabel颜色更改为红色。但是正如你所看到的,一些单元格即使有一些部分也是有颜色的。这怎么可能?

这是我的tableView:cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Initializing Cell and filling it with info
    Chapter *chapter = [self.MELs objectAtIndex:indexPath.row];

    cell.detailTextLabel.text = [NSString stringWithFormat:@"Number: %@ \t Sections: %lu", chapter.number, (unsigned long)[chapter.sections count]];
    cell.textLabel.text = [chapter.title capitalizedString];

    if ([chapter.sections count] == 0) {
        [cell.detailTextLabel setTextColor:[UIColor redColor]];
    }

    return cell;
}
4

3 回答 3

3

当单元格被重用时,如果不满足条件,您必须将 textcolor 重置为默认值:

if ([chapter.sections count] == 0) {
    [cell.detailTextLabel setTextColor:[UIColor redColor]];
} else {
    [cell.detailTextLabel setTextColor:[UIColor blackColor]];
}
于 2013-10-14T09:42:20.113 回答
2

这是因为您正在使用[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

[cell.detailTextLabel setTextColor:[UIColor redColor]];保存在可重复使用的单元格中。CellIdentifier如果您为“红色”单元格添加额外内容,问题就解决了。

此外。您应该检查检索到的单元格是否dequeueReusableCellWithIdentifier:forIndexPath返回nil

例子:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Initializing Cell and filling it with info
    Chapter *chapter = [self.MELs objectAtIndex:indexPath.row];

    NSString *CellIdentifier = @"Cell";
    if ([chapter.sections count] == 0) {
        CellIdentifier = @"Cell-red";
    }
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (cell == nil) {
            // Cell properties
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

            if ([CellIdentifier isEqual:@"Cell-red"]) {
                [cell.detailTextLabel setTextColor:[UIColor redColor]];
            }
    }

    cell.detailTextLabel.text = [NSString stringWithFormat:@"Number: %@ \t Sections: %lu", chapter.number, (unsigned long)[chapter.sections count]];
    cell.textLabel.text = [chapter.title capitalizedString];

    return cell;
}
于 2013-10-14T09:47:22.863 回答
2

尝试这个:-

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (indexPath.row % 2)// Change this according to your requirement
    {
        [cell.detailTextLabel setTextColor:[UIColor redColor]];
    }
    else
    {
        [cell.detailTextLabel setTextColor:[UIColor blackColor]];
    }
}
于 2013-10-14T09:49:07.863 回答