Раньше у меня был массив данных с большим объемом (~ 530 записей), отображаемый в виде таблицы. Данные были проведены в массиве словарей с двумя ключами, идентификатором и именем. Раньше я постучал по ячейке, добавил галочку и отправил номер строки ячейки в «selectedArray». Поскольку я уже сортировал их по алфавиту (все еще в одном разделе), indexPath.row, который был сохранен в selectedArray, соответствовал индексу массива словарей, поэтому я мог извлекать данные (идентификатор) из записи.Проверка/снятие метки таблицы с разделами
Я решил, что я разделил бы это на заголовки по алфавитному порядку (что было абсолютной болью, я не понимаю, почему именно такой сложный процесс вставляет заголовки в список записей). Но теперь, когда я использовал только indexPath.row, когда я отмечаю первый, он фиксирует первую запись каждого раздела и возвращает только число 0, поэтому я получаю только первую запись во всем наборе данных. Есть ли простой способ исправить это? Очень ценю любую помощь.
cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"inviteCell"];
// cell.accessoryType = UITableViewCellAccessoryCheckmark;
if ([checkedCells objectForKey:[NSNumber numberWithInt:indexPath.row]] != nil) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
// NSDictionary *friend = [sortedFriendsArray objectAtIndex:indexPath.row];
//---get the letter in the current section---
NSString *alphabet = [nameIndex objectAtIndex:[indexPath section]];
//---get all states beginning with the letter---
NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"SELF.name beginswith[c] %@", alphabet];
NSArray *states = [sortedFriendsArray filteredArrayUsingPredicate:predicate];
if ([states count]>0) {
//---extract the relevant state from the states object---
NSDictionary *friend = [states objectAtIndex:indexPath.row];
long long fbid = [[friend objectForKey:@"id"]longLongValue];
NSString *name = [friend objectForKey:@"name"];
NSString *urlString = [NSString stringWithFormat:@"https://graph.facebook.com/%qi/picture?type=square",fbid];
NSURL *url = [NSURL URLWithString:urlString];
UILabel *eventNameLabel = (UILabel *) [cell viewWithTag:1];
eventNameLabel.text = name;
UIImageView *eventLogo = (UIImageView*) [cell viewWithTag:2];
eventLogo.image = [UIImage imageNamed:@"112-group.png"];
// eventLogo.image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];;
}
return cell;
}
ТОК didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSNumber *indexNumber = [NSNumber numberWithInt:indexPath.row];
NSDictionary *friend = [sortedFriendsArray objectAtIndex:indexPath.row];
long long fbid = [[friend objectForKey:@"id"]longLongValue];
NSNumber *fbidNum = [NSNumber numberWithLongLong:fbid];
if ([checkedCells objectForKey:indexNumber] != nil) {
[checkedCells removeObjectForKey:indexNumber];
cell.accessoryType = UITableViewCellAccessoryNone;
}
else
{
[checkedCells setObject:fbidNum forKey:indexNumber];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
NSLog(@"Cell Pressed: %@",indexNumber);
NSLog(@"FBID: %lld",fbid);
NSLog(@"Array: %@",checkedCells);
}
Если вы хотите сделать вашу жизнь проще, используйте 'UILocalizedIndexedCollation' для генерации заголовков разделов. –
@AlanZeino спасибо, я посмотрю. Разве это не оставит меня с той же проблемой? –
Да, поэтому я не публиковал выше, как ответ на ваш вопрос, а скорее в сторону одного из ваших комментариев (re: «абсолютная боль»). –