Es gibt keine Möglichkeit, das automatisch zu tun. Sie müssen noch alle notwendigen Methoden von UITableViewDataSource
implementieren. Damit Ihre Datenquellenmethoden korrekte Daten bereitstellen können, sollten Sie zuerst eine geeignete Datenstruktur erstellen, indem Sie Ihre Aufgaben nach Kategorien gruppieren. Der einfachste Weg wäre, ein NSDictionary mit der Kategorie (in NSNumber eingepackt) als Schlüssel und einem NSArray entsprechender Aufgaben als Wert zu erstellen.
dieses Wörterbuch erstellen, tun so etwas wie dieses (nicht getestet):
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];
}
Der Grund, warum wir diese NSNumber
vorformulierten zu tun haben, ist, dass Sie nicht primitive Werte verwenden können (. ZB ganze Zahlen) als Wörterbuchschlüssel.
Sobald Sie dieses Wörterbuch (self.dict
im Code unten) haben, implementieren nur die notwendigen UITableViewDataSource
Methoden:
- (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.)
}
Natürlich ist dies nur ein möglicher Ansatz, aber ich hoffe, es hilft Ihnen zu bekommen die richtige Spur.
Das klingt großartig; wahrscheinlich genau das, was ich brauche, danke. Das einzige Problem ist, dass ich nicht herausfinden kann, wie man die richtigen Aufgabenobjekte in die richtigen Arrays bringt. Im Pseudocode möchte ich: 'für jedes Task-Objekt, fügen Sie das Array Kategorie1 hinzu, wenn task.category == 1'. – Triz
Ich habe gerade meine Antwort aktualisiert und einen Beispielcode hinzugefügt, um das Wörterbuch zu erstellen. Vielleicht ist es nicht die schönste Art, das zu tun, aber es sollte funktionieren. –
Ahhh, super. Okay. Schnelle Frage: 'self.dict' existiert noch nicht ... Woher kommt das? – Triz