У меня есть UITableView, где пользователь должен иметь возможность выбирать (проверять) несколько строк.UITableView не отменяет первую выбранную строку
У меня есть NSMutableArray в контроллере для хранения выбранных элементов, а в моем методе cellForRowAtIndexPath я проверяю, находится ли элемент в этом массиве и соответственно возвращает ячейку в контролируемое/неконтролируемое состояние.
Вот код:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = kContactCellReuseIdentifier;
static NSString *searchIdentifier = kContactSearchCellReuseIdentifier;
POContactCell *cell;
// Configure the cell...
if (tableView == self.tableView) {
cell = (POContactCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.contact = self.contacts[indexPath.row];
NSLog(@"Returned cell with name %@", cell.contact.name);
} else {
cell = (POContactCell*)[tableView dequeueReusableCellWithIdentifier:searchIdentifier forIndexPath:indexPath];
cell.contact = self.searchResults[indexPath.row];
}
if ([self.selectedContacts containsObject:cell.contact])
{
NSLog(@"was checked");
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
POContactCell* tappedCell = (POContactCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];
NSLog(@"Selected contact %@", tappedCell.contact.name);
if ([self.selectedContacts containsObject:tappedCell.contact]) {
// cell is already selected, so deselect it
NSLog(@"It's already selected, so deselect it");
[self.selectedContacts removeObject:tappedCell.contact];
tappedCell.accessoryType = UITableViewCellAccessoryNone;
}
else
{
NSLog(@"It's not already selected, so select it");
[self.selectedContacts addObject:tappedCell.contact];
tappedCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:NO];
}
Этот код работает ... для первого выбора, кроме. Первая ячейка, в которой пользовательские метчики будут проверяться и никогда не будет отключена. Я вижу из операторов журнала, что все ячейки проходят через один и тот же процесс, и он правильно распознает состояние выбора первой резьбовой строки, даже если аксессуар не отражает ее.
После первого выбора все остальные ряды работают отлично.
Любые идеи по отладке?
Я просто пробовал работать только с массивом self.contacts. Все еще такая же проблема. – Shinigami
Вы изменили код в 'didSelectRowAtIndexPath:', чтобы вытащить контакт из соответствующего массива (self.contacts или self.searchResults), а затем проверить, находится ли этот объект в вашем массиве выбранных элементов? –
Да, теперь 'didSelectRowAtIndexPath:' имеет 'self.contacts [indexPath.row]' для проверки сдерживания или добавления/удаления файлов. Но все тот же результат. – Shinigami