2009-08-11 7 views
0

J'ai une classe d'objet avec une propriété de catégorie (task.category), qui est définie sur une valeur entière (1, 2 ou 3). Je voudrais avoir une table groupée se construire en mettant chaque task dans la bonne section ...Comment placer des cellules dans certaines sections d'une table groupée?

Comment obtenir certains objets de cellule à dessiner dans certaines sections d'une table groupée, basée sur une de leurs propriétés ?

Merci! :)

Répondre

2

Il n'y a aucun moyen de le faire automagiquement. Vous devez toujours implémenter toutes les méthodes nécessaires de UITableViewDataSource. Pour que vos méthodes de source de données fournissent des données correctes, vous devez d'abord créer une structure de données appropriée en regroupant vos tâches par catégorie. Le plus simple serait de construire un NSDictionary avec la catégorie (enveloppée dans NSNumber) comme clé et un NSArray de tâches correspondantes comme valeur.

Pour construire ce dictionnaire, faire quelque chose comme ça (non testé):

NSArray* keys = [NSArray arrayWithObjects:[NSNumber numberWithInteger:1], [NSNumber numberWithInteger:2], [NSNumber numberWithInteger:3], nil]; 
NSArray* objects = [NSArray arrayWithObjects:[NSMutableArray array], [NSMutableArray array], [NSMutableArray array], nil]; 
self.dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

for(Task* task in tasks) { // if tasks is your array holding all tasks 
    NSNumber* bucket = [NSNumber numberWithInteger:task.category]; 
    [[dict objectForKey:bucket] addObject:task]; 
} 

La raison pour laquelle nous devons faire NSNumber boilerplate, est que vous ne pouvez pas utiliser des valeurs primitives (. Par exemple des entiers) comme des clés de dictionnaire.

Une fois que vous avez ce dictionnaire (self.dict dans le code ci-dessous), tout mettre en œuvre les UITableViewDataSource nécessaires méthodes:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 3; // supposing you have 3 categories 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSArray* tasks = [self.dict objectForKey:[NSNumber numberWithInteger:(section + 1)]]; 
    return [tasks count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSArray* tasks = [self.dict objectForKey:[NSNumber numberWithInteger:(indexPath.section + 1)]]; 
    Task* task = [tasks objectAtIndex:indexPath.row]; 

    // other stuff usually done here (create cell, set content of cell etc.) 
} 

Bien sûr, cela est juste une approche possible, mais je l'espère, il aide à vous sur la bonne voie.

+0

Cela sonne bien; probablement exactement ce dont j'ai besoin, merci. Le seul problème est que je n'arrive pas à comprendre comment obtenir les bons objets de tâche dans les bons tableaux. En pseudocode, je veux: 'pour chaque objet de tâche, ajouter au tableau Category1 si task.category == 1'. – Triz

+0

Je viens de mettre à jour ma réponse et ajouté un exemple de code pour construire le dictionnaire. Ce n'est peut-être pas la meilleure façon de le faire, mais cela devrait fonctionner. –

+0

Ahhh, génial. D'accord. Question rapide: 'self.dict' n'existe pas encore ... D'où cela vient-il? – Triz

Questions connexes