2011-01-31 14 views
5

Tengo una vista de tabla, que tiene su fuente de datos de una matriz que contiene nombres de personas.Conversión de vista de tabla para tener secciones

Ahora, para que sea más fácil encontrar personas, quiero seccionar la vista de tabla para que tenga la letra A-Z en el lado derecho, al igual que la aplicación de la libreta de direcciones.

Pero mi matriz actual solo contiene una colección de NSStrings. ¿Cómo los divido para que estén agrupados por la primera letra de los nombres? ¿Hay alguna forma conveniente de hacerlo?

EDIT: Si alguien está interesado en mi código final:

NSMutableArray *arrayChars = [[NSMutableArray alloc] init]; 

for (char i = 'A'; i <= 'Z' ; i++) { 
    NSMutableDictionary *characterDict = [[NSMutableDictionary alloc]init]; 
    NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 

    for (int k = 0; k < [myList count]; k++) { 

     NSString *currentName = [[friends objectAtIndex:k] objectForKey:@"name"]; 
     char heading = [currentName characterAtIndex:0]; 
     heading = toupper(heading); 

     if (heading == i) { 
      [tempArray addObject:[friends objectAtIndex:k]]; 
     } 
    } 
    [characterDict setObject:tempArray forKey:@"rowValues"]; 
    [characterDict setObject:[NSString stringWithFormat:@"%c",i] forKey:@"headerTitle"]; 
    [arrayChars addObject:characterDict]; 

    [characterDict release]; 
    [tempArray release]; 
} 

Al final de la función que voy a tener:

arrayChars [0] = dictionary(headerTitle = 'A', rowValues = {"adam", "alice", etc}) 
arrayChars[1] = dictionary(headerTitle = 'B', rowValues = {"Bob", etc}) 

Gracias a todos por su ayuda!

Respuesta

2

Puede usar un diccionario para clasificarlos, por tanto, crear una matriz con todas las letras que desea ordenar y una matriz con los objetos nulos para inicializar el diccionario

NSArray *names = @[@"javier",@"juan", @"pedro", @"juan", @"diego"]; 
NSArray *letters = @[@"j", @"p", @"d"]; 
NSMutableArray *objects = [[NSMutableArray alloc] init]; 

for (NSInteger i = 0; i < [letters count]; ++i) 
{ 
    [objects addObject:[[NSMutableArray alloc] init]]; 
} 

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:objects forKeys:letters]; 

A continuación, debe encontrar la primera letra si la palabra y poner esa palabra en la tecla correspondiente en el diccionario

for (NSString *name in names) { 
    NSString *firstLetter = [name substringToIndex:1]; 

    for (NSString *letter in letters) { 
     if ([firstLetter isEqualToString:letter]) { 
      NSMutableArray *currentObjects = [dictionary objectForKey:letter]; 
      [currentObjects addObject:name]; 
     } 
    } 

} 

Para comprobar que puede imprimir directamente el diccionario

NSLog(@"%@", dictionary); 

Luego es su trabajo para completar sus secciones en la tabla vista usando el diccionario

Cuestiones relacionadas