Прокрутка портит пользовательские ячейки в UITableView - PullRequest
0 голосов
/ 29 ноября 2011

Я разрабатываю приложение, которое имеет UITableView с пользовательским UITableViewCells. Ячейки содержат флажки и 3 метки. Пользователь может выбрать несколько строк, установив флажки. Когда я выбираю более одной строки и прокручиваю табличное представление, флажок исчезает из флажка. Это означает, что выбранные строки переходят в невыбранный режим. Как это можно исправить?

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Я думаю, что ваша проблема может быть с повторным использованием клетки. Создайте NSMutableDictionary в вашем контроллере (должна быть и переменная экземпляра), и создайте его так:

dictionary = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                 [NSNumber numberWithBool:NO], [NSIndexPath indexPathForRow:0 inSection:0],
                 [NSNumber numberWithBool:NO], [NSIndexPath indexPathForRow:1 inSection:0], nil];

Сделайте это для всех ваших строк или, если необходимо, вычислите строки и их индексы, но установите для всех их объектов значение [NSNumber numberWithBool:NO.

Сейчас, в tableView:didSelectRowAtIndexPath:

if ([(NSNumber *)[dictionary objectForKey:indexPath] isEqualToNumber:[NSNumber numberWithBool:NO]) {
    [dictionary setObject:[NSNumber numberWithBool:YES] forKey:indexPath];
    // Do any visual updating necessary
} else {
    [dictionary setObject:[NSNumber numberWithBool:NO] forKey:indexPath];
    // Do any visual updating necessary
}

Теперь, когда у нас есть способ сохранить, выбрана ли ячейка или нет, измените идентификатор ячейки, чтобы он работал для ваших ячеек:

NSString *identifier = [[dictionary objectForKey:indexPath] stringValue];
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier] autorelease];
}

// Do any visual updating necessary
return cell;

Теперь обновите свой пользовательский класс ячеек, чтобы принимать @"0" и @"1" в качестве идентификаторов, и обновите их выбранное состояние автоматически на основе этого ввода.

0 голосов
/ 29 ноября 2011

Я предполагаю, что это потому, что клетки снова используются.Это означает, что cellForRowAtIndex: вызывается, когда ячейка прокручивается обратно в поле зрения.И флажок по умолчанию устанавливается в невыбранный режим.Сохраните состояние флажка в массиве и установите состояние флажка ячейки согласно этому

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