2010-05-03 7 views
0

J'ai une vue de table qui est remplie par un tableau. Actuellement, la vue de table n'a aucun groupement. Ce que je voudrais faire est de vérifier une valeur de chaque objet de tableau, comme l'état, et de regrouper tous les éléments CA ensemble, tous les éléments OU ensemble, etc. Puis, assignez ces groupes un titre.Vue de table iPhone: titleForHeaderInSection dérivée du tableau

Le tableau est dynamique, et va grandir et obtenir de nouvelles valeurs à l'avenir, donc je ne peux pas coder en dur les titres, je voudrais que ceux-ci viennent en quelque sorte de mon tableau initial.

Actuellement, j'utilise ce qui suit, mais il ne prend pas en compte le tri du tableau, ou si j'ai supprimé tous les éléments du tableau qui concernent la Californie.

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

Donc, je suis confus quant à la façon dont cela serait possible. Des conseils seraient appréciés.

Répondre

3

Je voudrais avoir un tableau par état/province/etc et mettre ces tableaux dans un dictionnaire en utilisant l'état de la clé. Puis un autre tableau contenant toutes les clés d'état. Créez/mettez à jour le tableau de clés d'état à l'aide de keysSortedByValueUsingSelector lorsque vous ajoutez ou supprimez le dictionnaire. Et un code comme celui-ci pour mettre en œuvre les délégués de table ...

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

EDIT: Ces tableaux et les dictionnaires peuvent être déclarés comme ceci:

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

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

Pour ajouter un nouvel enregistrement d'adresse, quelque chose comme cela devrait le faire. Vous auriez besoin de quelque chose de similaire pour supprimer une adresse, mais vous devriez avoir assez maintenant pour comprendre cela.

-(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 
} 
+0

Ok, maintenant nous arrivons quelque part ici. Existe-t-il un bon moyen de créer des tableaux séparés basés sur une instruction if? Ainsi, je pourrais vérifier si chaque élément de mon tableau initial provient d'un certain état puis les pousser dans un autre tableau. Je ne sais pas comment cela fonctionnerait ... –

+0

J'ai édité ma réponse pour ajouter plus de détails. – progrmr

Questions connexes