2009-08-11 3 views
0

Ich habe eine Klasse von Objekt mit einer Kategorie-Eigenschaft (task.category), die auf einen ganzzahligen Wert (1, 2 oder 3) festgelegt ist. Ich möchte eine gruppierte Tabelle selbst erstellen, indem Sie jede task in den richtigen Abschnitt setzen ...Wie setze ich Zellen in bestimmte Abschnitte in einer gruppierten Tabelle?

Wie bekomme ich bestimmte Zellobjekte in bestimmten Abschnitten einer gruppierten Tabelle basierend auf einer ihrer Eigenschaften gezeichnet werden ?

Danke! :)

Antwort

2

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.

+0

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

+0

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. –

+0

Ahhh, super. Okay. Schnelle Frage: 'self.dict' existiert noch nicht ... Woher kommt das? – Triz

Verwandte Themen