2015-08-01 2 views
5

Ho un NSMutableArray: self.contact con gli oggetti (nome in ordine alfabetico):Ordina contatti in ordine alfabetico con la Sezione UITableView

(
    "Anna Haro", 
    "Cheesy Cat", 
    "Daniel Higgins", 
    "David Taylor", 
    "Freckles Dog", 
    "Hank Zakroff", 
    "John Appleseed", 
    "Kate Be\U00e9ll" 
) 

riesco a visualizzare sulla destra l'alfabeto con questa riga di codice:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
     return[NSArray arrayWithObjects:@"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]; 
    } 

Ora, devo implementare il metodo che mi consente di accedere alla sezione buona?

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString*)title atIndex:(NSInteger)index { 

} 

E forse ho cambiare numberOfSections? Qui è il mio codice:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
return 1 
} 

prossimo:

Ho fatto due array: NSArray *test = [self.contact sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];:

(
    "Anna Haro", 
    "Cheesy Cat", 
    "Daniel Higgins", 
    "David Taylor", 
    "Freckles Dog", 
    "Hank Zakroff", 
    "John Appleseed", 
    "Kate Be\U00e9ll" 
) 

e

NSMutableDictionary dicoAlphabet:

// Dictionary will hold our sub-arrays 
    self.dicoAlphabet = [NSMutableDictionary dictionary]; 

    // Iterate over all the values in our sorted array 
    for (NSString *value in test) { 

     // Get the first letter and its associated array from the dictionary. 
     // If the dictionary does not exist create one and associate it with the letter. 
     NSString *firstLetter = [value substringWithRange:NSMakeRange(0, 1)]; 
     NSMutableArray *arrayForLetter = [self.dicoAlphabet objectForKey:firstLetter]; 
     if (arrayForLetter == nil) { 
      arrayForLetter = [NSMutableArray array]; 
      [self.dicoAlphabet setObject:arrayForLetter forKey:firstLetter]; 
     } 

     // Add the value to the array for this letter 
     [arrayForLetter addObject:value]; 
    } 

    // arraysByLetter will contain the result you expect 
    NSLog(@"Dictionary: %@", self.dicoAlphabet); 

resi:

Dictionary: { 
    A =  (
     "Anna Haro" 
    ); 
    C =  (
     "Cheesy Cat" 
    ); 
    D =  (
     "Daniel Higgins", 
     "David Taylor" 
    ); 
    F =  (
     "Freckles Dog" 
    ); 
    H =  (
     "Hank Zakroff" 
    ); 
    J =  (
     "John Appleseed" 
    ); 
    K =  (
     "Kate Be\U00e9ll" 
    ); 
} 

risposta

1

provare il seguente collegamento. Ti aiuterà a farlo abbastanza facilmente. Fammi sapere se hai problemi mentre lo fai. Tutorial for contact view controller section headers and index

Così, per dati non statici, diciamo che dispone di un array di contatti chiamato arrContacts allora si può facilmente ordinare utilizzando [arrContacts sortUsingSelector: @selector(localizedCaseInsensitiveCompare:)] ora per ottenere un array con tutti i titoli di sezione solo ciclo attraverso l'array e per ogni assetto oggetto la stringa alla prima lettera e aggiungere a questo array se non già presente. Ecco fatto, ora hai un elenco di sezioni in un array e contatti alfabeticamente ordinati in un altro. Fammi sapere come va. ;)

+0

ciao, grazie per aver risposto! Ho già visto questo tutorial, è un buon tuto, ma è per dati statici (animali), vorrei sostituire animals = @ {@ "B": @ [@ "Bear", @ "Black Swan", @ "Buffalo"] ... con dati variabili (elenco contatti) ... Sai come farlo? – Viny76

+0

Ho appena modificato la mia risposta, fammi sapere se è d'aiuto. – Aish

+0

Grazie amico! Ho aggiornato la mia domanda :) Cosa devo fare dopo, per favore? – Viny76