Весь алфавит для индекса разделов в основных данных - PullRequest
5 голосов
/ 30 декабря 2011

Я реализовал таблицу, заполненную основными данными, и теперь я пытаюсь проиндексировать ее по разделам, отображая боковой алфавит (в формате «Контакты»).

В приведенном ниже коде, если я используюзакомментированная строка, у меня есть только буквы для существующих разделов.Но мне нужен весь алфавит, и поэтому я изменил возвращаемый массив:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{    
    //return [fetchedResultsController sectionIndexTitles];    

    indexArray = [NSArray arrayWithObjects: @"{search}", @"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J",@"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", @"#", nil];
    return indexArray;
}

Все буквы отображаются на боковом указателе.Но теперь я должен реализовать метод, который возвращает индекс выбранного раздела, и здесь у меня есть некоторые проблемы:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    //return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];

    NSString *correspondingLetter = [indexArray objectAtIndex:index];
    NSUInteger correspondingIndex = [[fetchedResultsController sections] indexOfObject:correspondingLetter];

    NSLog(@"------index:%i\ncorrespondingLetter: %@\ncorrespondingIndex: %i\n", index,correspondingLetter, correspondingIndex);

    return correspondingIndex;
}

С кодом выше, если я использую закомментированную строку, у меня естьошибка каждый раз, когда я выбираю письмо, которое не имеет соответствующего раздела.Итак, что я пытаюсь сделать, это получить индекс раздела, используя букву, которая была выбрана, и искать ее положение в существующих разделах.Но это не работает.У вас есть идеи?

Заранее спасибо, ясса

Ответы [ 2 ]

5 голосов
/ 30 декабря 2011

Вы должны искать в

@property (nonatomic, readonly) NSArray *sectionIndexTitles

из fetchedResultController .
Но, если этот индекс не существует, вы получите NSNotFound и вам потребуетсявыполнить некоторую логику, чтобы вернуть предыдущий буквенный индекс, или предыдущий, или предыдущий и т. д.

2 голосов
/ 18 октября 2013

Для поддержки дополнительных языков я бы не использовал жестко закодированные символы. Мое решение вдохновлено принятым ответом:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    return [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles];
}


- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    NSString *correspondingLetter = [[[UILocalizedIndexedCollation currentCollation] sectionIndexTitles] objectAtIndex:index];
    return [[self.fetchedResultsController sectionIndexTitles] indexOfObject:correspondingLetter];
}
...