Я думаю, что ваша проблема может быть с повторным использованием клетки. Создайте 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"
в качестве идентификаторов, и обновите их выбранное состояние автоматически на основе этого ввода.