accessoryTypeCheckmark исчезает, когда UITableViewCell скрыт - PullRequest
0 голосов
/ 16 марта 2011

Я создаю функцию для отслеживания сроков. Когда вы выбираете строку в представлении таблицы крайнего срока, я меняю 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 снова None.

Мой код для определения accessoryType в cellForRowAtIndexPath:

- (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 Ответ

6 голосов
/ 16 марта 2011

Вы не должны использовать TableViewCell для хранения данных.Вот для чего предназначен ваш источник данных, TableViewCell - это просто видимое представление данных в вашем источнике данных.

Поскольку ячейка используется повторно после того, как она больше не отображается, все данные сбрасываются.в вашем UItableViewDataSoucre вы должны проверить, выполнена ли задача, и установить accessoryType для этой галочки.

Поэтому добавьте NSLog в метод cellForIndexPath и проверьте, действительно ли установлен логическое значение done.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...