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;
}
Was ist Ihre Frage? Welches problem haben Sie? Welche Fehlermeldungen?
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

Schreibe einen Kommentar