2011-12-30 10 views
5

Zaimplementowałem tabelę wypełnioną danymi podstawowymi i teraz próbuję ją indeksować za pomocą sekcji wyświetlając alfabet strony (w formacie Kontakty, takie jak).Cały alfabet dla indeksu sekcji w danych podstawowych

W poniższym kodzie, jeśli używam skomentowanej linii, mam tylko litery dla istniejących sekcji. Ale chcę mieć cały alfabet, więc zmieniłem zwróconą tablicę:

- (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; 
} 

Wszystkie litery są wyświetlane w bocznym indeksie. Ale teraz mam wdrożyć metodę, która zwraca indeks wybranej sekcji, a tu mam pewne problemy:

- (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; 
} 

z kodem powyżej, jeżeli używam skomentował linię, mam błąd każdego czas wybieram literę, która nie ma odpowiedniej sekcji. Więc próbuję to zrobić, to pobrać indeks sekcji za pomocą litery, która została wybrana i przeszukując jej pozycję w istniejących sekcjach. Ale to nie działa. Czy masz jakieś pomysły?

Dzięki z góry, Yassa

Odpowiedz

5

należy wyszukać w

@property (nonatomic, readonly) NSArray *sectionIndexTitles 

z fetchedResultController.
Ale jeśli jest to wskaźnik, który nie istnieje otrzymasz NSNotFound i będzie musiał zrobić trochę logiki, aby powrócić do poprzedniego indeksu literowego lub poprzedni, lub poprzedniego, itd

+1

Niewiarygodne, było przede mną i nie widziałem tego !! :) Jak zasugerowałeś, wystarczyło wykonać następujące czynności: 'correspondIndex = [[fetchedResultsController sectionIndexTitles] indexOfObject: correspondLetter];'. Dziękuję bardzo !!! – yassassin

2

do wspierania dodatkowych języków I nie użyłby znaków zakodowanych na sztywno. Moje rozwiązanie zostało zainspirowane zaakceptowaną odpowiedzią:

- (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]; 
} 
Powiązane problemy