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.
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
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. –
Ahhh, génial. D'accord. Question rapide: 'self.dict' n'existe pas encore ... D'où cela vient-il? – Triz