Wie festgelegt und dequeue-custom UITableViewCell mit dynamischen reuse-identifier?
Hier ist, was ich versuche zu tun, letztlich. Ich möchte ein Menü anzeigen von Elementen in einer UITableView, aber dynamisch, so dass der Typ des Elements angezeigt bestimmt die benutzerdefinierte Zelle anzeigen geladen. Zum Beispiel, nehmen wir an, der Menüpunkt Typ 'switch', dann geladen werden, die eine Feder mit dem Namen 'wechseln.xib' und der Staat wird sein on/off-je nach bestimmten Menüpunkt Wert. Möglicherweise gibt es 5 Elemente, das sind "Schalter" - Typ, aber unterschiedliche Werte haben. Also ich will das gleiche xib für jeden, aber 5 Instanzen.
So, lange Wege um auf die Frage. Wenn ich das laden der Zelle Aussicht von der Spitze, würde ich denken, dass das einzigartige Wiederverwendung-Bezeichner für die Warteschlange entfernen, wenn es Schriftrollen zurück auf den Bildschirm, richtig? (Eindeutig für jede Instanz, also jedes Menü-Element.) In der UITableViewCell in Interface Builder, ich sehen, wo kann ich eine reuse identifier-Eigenschaft, aber ich möchte, um es zur Laufzeit für jede Instanz des Schalters. Zum Beispiel, Menüpunkt #1 ist ein Schalter, #2 ein text-Feld, die #3 ist ein Schalter, usw. Also #1 und #3 beide müssen eindeutige cell-ID zu entfernen.
Hier ist, was mein cellForRowAtIndexPath aussieht:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Cells are unique; dequeue individual cells not generic cell formats
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", indexPath.row];
ITMenuItem *menuItem = [menu.menuItems objectAtIndex:indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
//Load cell view from nib
NSString *cellNib = [NSString stringWithFormat:@"MenuCell_%@", menuItem.type];
[[NSBundle mainBundle] loadNibNamed:cellNib owner:self options:nil];
cell = myCell;
self.myCell = nil;
}
//Display menu item contents in cell
UILabel *cellLabel = (UILabel *) [cell viewWithTag:1];
[cellLabel setText:menuItem.name];
if ([menuItem.type isEqualToString:@"switch"]) {
UISwitch *cellSwitch = (UISwitch *) [cell viewWithTag:2];
[cellSwitch setOn:[menuItem.value isEqualToString:@"YES"]];
}
else if ([menuItem.type isEqualToString:@"text"]) {
UITextField *textField = (UITextField *) [cell viewWithTag:2];
[textField setText:menuItem.value];
}
return cell;
}
Sorry, vielleicht ist es ein bisschen schwierig, zu Wort deutlich. Die Frage ist, wie kann ich markiere die Zelle mit einem reuse-identifier, wenn ich es zuweisen, so dass die dequeue funktionieren???
InformationsquelleAutor Jay Imerman | 2012-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die reuse-identifier in der nib-Datei. Also für die Schalter.xib, die Sie verwenden würden, 'switch' als reuse-identifier. Dann ändern Sie einfach
zu
unter der Annahme, dass
menuItem.type
ist 'switch'Ja, das ist genau das, was Sie wollen. Habe das gleiche reuse-identifier bedeutet, dass eine Instanz des 'switch' Zelle wiederverwendet werden kann, für einen anderen Schalter.
In meinem Fall, die geringe Anzahl von Menüpunkten, es schien zu funktionieren ohne wachsende Speicherverbrauch nicht aus der Warteschlange entfernt, die Zellen überhaupt. Ich weiß nicht, ob es wird ein Problem verursachen, wenn er versucht, mehrere anzeigen "switch" - Zellen, zum Beispiel, auf dem Bildschirm auf einmal. Wahrscheinlich eher nicht, die werden nur aus der Warteschlange entfernt werden Zellen aus dem Bildschirm gescrollt. Da die Menüs nicht lange, es wird nicht viel queuing jedenfalls. Danke für den Tipp!
InformationsquelleAutor Alejandro
InformationsquelleAutor Bhushan_pawar