当隐藏UITableViewCell时,accessoryType Checkmark消失

时间:2011-03-16 10:11:05

标签: iphone objective-c uitableview

我正在创建一个跟踪截止日期的功能。在截止日期表视图中选择一行时,我将accessoryType更改为Checkmark。这与以下代码完美配合:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    Cell *selectedCell = (Cell *)[tableView cellForRowAtIndexPath: indexPath];

    if (selectedCell.accessoryType == UITableViewCellAccessoryNone) {
        [Deadline setDone: TRUE onIndex:indexPath.row];
        selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;

    } else {
        [Deadline setDone: FALSE onIndex:indexPath.row];
        selectedCell.accessoryType = UITableViewCellAccessoryNone;
    }

    [tableView deselectRowAtIndexPath:indexPath animated: YES];
}

当您选择了一个表格单元格并且滚动它以使其消失时,会出现问题,当再次出现时,accessoryType再次为“无”。

我在cellForRowAtIndexPath中决定accessoryType的代码是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"CellIdentifier";

    Deadline *d = [self.arrDeadlines objectAtIndex:indexPath.row];

    Cell *currCell = (Cell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (currCell == nil) 
    {
        UIViewController *c = [[UIViewController alloc] initWithNibName:@"Cell" bundle:nil];
        currCell = (Cell *)c.view;
        [c release];        
    }

    currCell.lblTitle.text = d.name;    

    currCell.accessoryType = d.done == TRUE ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

    return currCell;
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

您不应使用TableViewCell来保存数据。 这是您的dataSource的用途,TableViewCell只是数据源中数据的可见表示。

由于单元格在不再显示后重复使用,所有数据都会重置。

因此,在UItableViewDataSoucre中,您应检查任务是否完成,并将accessoryType设置为复选标记。

所以在cellForIndexPath方法中添加一个NSLog,并检查是否真的设置了完成的布尔值。