/ / iPhone tableview: titleForHeaderInSection derivado de array - iphone, Objective-C, uitableview, arrays

Tableview del iPhone: titleForHeaderInSection derivado de la matriz: iphone, object-c, uitableview, arrays

Tengo una vista de tabla que se completa con una matriz. Actualmente la vista de tabla no tiene agrupación. Lo que me gustaría hacer es verificar un valor de cada objeto de matriz, como Estado, y agrupar todos los elementos CA, todos los elementos OR juntos, etc. Luego, asigne un título a esos grupos.

La matriz es dinámica, y crecerá y obtendrá nuevos valores en el futuro, por lo que no puedo codificar títulos, me gustaría que de alguna manera provengan de mi matriz inicial.

Actualmente estoy usando lo siguiente, pero no tiene en cuenta la clasificación de la matriz, o si eliminé todos los elementos de la matriz que tienen que ver con California.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if (section == 0) {
return @"California";
} else if (section == 1) {
return @"Washington";
} else {
return @"Utah";
}
}//end tableView

Entonces, me estoy confundiendo sobre cómo esto sería posible. Cualquier consejo sería apreciado.

Respuestas

3 para la respuesta № 1

Tendría una matriz por estado / provincia / etc. ypon esas matrices en un diccionario usando el estado como clave. Luego otra matriz que contiene todas las claves de estado. Cree / actualice la matriz de claves de estado utilizando keysSortedByValueUsingSelector cuando agregue o elimine el diccionario. Y un código como este para implementar los delegados de la tabla ...

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [stateKeyArray count];
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [stateKeyArray objectAtIndex:section];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString* stateKey = [stateKeyArray objectAtIndex:section];
return [[dataDict objectForKey:stateKey] count];
}

EDITAR: Estas matrices y diccionarios pueden declararse así:

// key=state (an NSString), obj=NSMutableArray of AddressRecord objects
NSMutableDictionary* dataDict;

// sorted array of state keys (NSString)
NSMutableArray* stateKeyArray;

Para agregar un nuevo registro de dirección, algo como esto debería hacerlo. Necesitarías algo similar para eliminar una dirección, pero ahora deberías tener suficiente para resolverlo.

-(void)addAddress:(AddressRecord* addr) {
NSMutableArray* stateArray = [dataDict objectForKey:addr.state];

if (stateArray==nil) {
// adding a new state
stateArray = [NSMutableArray new];
[dataDict setObject:stateArray forKey:addr.state];  // add state array to dict
[stateArray release];

// update array of state keys (assuming they are NSString)
self.stateKeyArray = [dataDict keysSortedByValueUsingSelector:@selector(localizedCompare:)];
}

[stateArray addObject:addr];   // add address to state array
}