Ich bin mir sicher, dass diese Frage nicht eindeutig ist, aber ich habe keine anderen Quellen gefunden, um sie zu lösen. Tatsächlich haben diese mehr Verwirrung verursacht. Bitte gib Licht, wenn du kannst.Verwechslung mit wiederverwendbaren Zellen (falsche Zellen nach dem Scrollen betroffen)
Der Kernpunkt des Problems ist, dass ich ein UILabel in eine Zelle einer 7-zeiligen 30-Zeilen-Tabelle mit benutzerdefinierten Zellen (-50) schieben möchte. Nach dem Scrollen verschieben ein paar andere Zeilen dieses Label und sie bewegen sich weiter und weiter, während das Scrollen fortgesetzt wird.
Sie werden feststellen, dass die minus 50 x -Koordinate an 2 Stellen zum Testen steht. Der erste in cell == nil wird nie aufgerufen. Warum?? Ich dachte, das wäre der Ort, um dieses Problem zu lösen.
Auch nicht sicher, wie initWithStyle (nicht für benutzerdefinierte) oder initWithCoder (im Storyboard erstellt) selbst wenn die Zelle Null war. ??
NSArray *a = [[userDetailData objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]];
NSString *key = [[[a objectAtIndex:0] allKeys] objectAtIndex:0];
NSString *value = [[a objectAtIndex:0] valueForKey:key];
static NSString *CellIdentifier = @"MasterCell";
UsersTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// If cell does not exist, create it, otherwise customize existing cell for this row
if (cell == nil) {
// Create cell
cell = [[UsersTableViewCell alloc] initWithCoder:<#(NSCoder *)#>reuseIdentifier:CellIdentifier];
// Configure cell:
NSLog(@"Key: %@ %d, %d", key, [indexPath section], [indexPath row]);
// Prepare the date field to move left for checkmark or ex-mark
if ([key isEqualToString:@"Date"]) {
CGRect frame = cell.comboLabel.frame;
frame.origin.x -= 50;
cell.comboLabel.frame = frame;
NSLog(@"In Date... minus 50");
}
}
// Customize cell:
CGRect frame = cell.comboLabel.frame;
if ([key isEqualToString:@"Date"]) {
frame.origin.x -= 50;
cell.comboLabel.frame = frame;
NSLog(@" %d, %d\n cell: %@\n", [indexPath section], [indexPath row], cell);
}
else {
frame.origin.x += 0;
cell.comboLabel.frame = frame;
}
// Reset color
cell.comboLabel.textColor = [UIColor blackColor];
// Set the Item
cell.nameLabel.text = [NSString stringWithFormat: @" %@",key];
// Give the cell an accessory indicator
..... continue on with logic.
OK. Ich sehe die Idee, die du präsentierst. Deshalb können wir mehrere "Prototyp-Zellen" im Storyboard haben ?? – David
Ja, das ist es, wofür ich sie verwende, wenn ich eine Tabelle mit ein paar verschiedenen Arten von Daten habe, die ich präsentieren möchte. Ich erstelle für jeden Datentyp einen anderen Prototyp und sortiere ihn entsprechend in der Funktion cellForRowAtIndexPath. –
Ehrfürchtig. Das funktioniert. Keine treibenden UILabels mehr. Vielen Dank! – David