Ich habe UITableView
, die benutzerdefinierte UITableViewCell
s verwendet. Die Zellen können eine von drei Arten von Hintergrundbildern haben (festgelegt in der Eigenschaft .backgroundView.image
jeder Zelle): oben, Mitte oder unten. Die oberen und unteren Bilder sind für die erste und die letzte Zelle und haben abgerundete Ecken (ähnlich wie eine gruppierte UITableView
Zellen). Alle anderen "mittleren" Zellen innerhalb der UITableView
haben ein rechteckiges mittleres Hintergrundbild.Nachladen benutzerdefinierter UITableViewCell nach Neuanordnen von Zellen
Mein Problem ist, dass bei der Neuordnung der Zellen in UITableView
Edit Modus die Zellen nicht mit einem anderen Hintergrundbild je nach ihrem neuen Speicherort aktualisieren. Wenn ich zum Beispiel die erste Zelle in die Mitte der Tabelle verschiebe, behält sie immer noch ihr ursprüngliches "oberes" Hintergrundbild (mit abgerundeten Ecken) und die neue Zelle, die oben in der Tabellenansicht erscheint, hat immer noch ihre ursprüngliche "Mitte" Hintergrundbild, das alles ein bisschen seltsam aussieht.
Ich kann dies umgehen, indem Sie eine reloadData
in der Tabellenansicht, aber das hat das Problem, nicht eine schöne anmutige Animation der Änderungen zu geben. Ich habe festgestellt, dass beim Neuanordnen eines Standards gruppiert UITableView
, sobald eine Zelle bewegt/gezogen wird das Hintergrundbild auf den relevanten Zellen ändern (noch bevor die verschobene Zelle wurde an seinen neuen Standort fallen gelassen), die sehr schön aussieht. Ich möchte das Gleiche erreichen.
Zu diesem Zweck habe ich tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath
implementiert, die jedes Mal aufgerufen wird, wenn eine Zeile in der Tabellenansicht gezogen wird. In diesem habe ich verschiedene Methoden der Einstellung der backgroundView.image
einschließlich nur direkt das Bild einstellen und dann auch explizit gesagt, um die Zelle und/oder Bild neu zu zeichnen mit setNeedsLayout
und setNeedsDisplay
, aber nichts scheint die Zelle neu zu zeichnen. Ich habe NSLog
'ged die Ergebnisse dieser Änderungen und sie scheinen sich auf die Zelle zu verpflichten, wie die richtigen Werte in der NSLog
erscheinen, aber die Zelle scheint nur nicht auf dem Bildschirm zu aktualisieren.
Wenn jemand darauf hinweisen könnte, was ich falsch mache, oder einen besseren Weg vorschlagen, ein Arbeitsergebnis zu erreichen, würde ich sehr dankbar sein. Vielen Dank!
EDIT: der folgende Code wurde aus der Fülle und formatierte gezogen, so dass es leichter verdaut werden kann:
UIImage *rowBackground;
UIImage *selectionBackground;
NSInteger sectionRows = [_tableView numberOfRowsInSection:[indexPath section]];
NSInteger row = [indexPath row];
if (row == 0 && row == sectionRows - 1)
{
rowBackground = [UIImage imageNamed:@"field_title_bkg.png"];
selectionBackground = [UIImage imageNamed:@"field_title_bkg.png"];
}
else if (row == 0)
{
rowBackground = [UIImage imageNamed:@"table_row_top_bkg.png"];
selectionBackground = [UIImage imageNamed:@"table_row_top_bkg.png"];
}
else if (row == sectionRows - 1)
{
rowBackground = [UIImage imageNamed:@"table_bottom_row_bkg.png"];
selectionBackground = [UIImage imageNamed:@"table_bottom_row_bkg.png"];
}
else
{
rowBackground = [UIImage imageNamed:@"table_row_bkg.png"];
selectionBackground = [UIImage imageNamed:@"table_row_bkg.png"];
}
UIImageView *rowBackGroundImageView = [[UIImageView alloc] initWithImage:rowBackground];
UIImageView *rowBackGroundSelectionImageView = [[UIImageView alloc] initWithImage:selectionBackground];
if (row != sectionRows - 1)
{
UIImageView *sep = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell_separator.png"]];
[sep setFrame:CGRectMake(20, 56, 280, 1)];
[rowBackGroundImageView addSubview:sep];
}
[cell setBackgroundView:rowBackGroundImageView];
[rowBackGroundImageView release];
Sie können versuchen, die Tabellenansicht mit einer anderen Ansicht darüber zu maskieren. Dann brauchen Sie keine Hintergrundbilder für Zellen. – Eimantas
Können Sie diese Idee ein bisschen mehr erklären? Ich verstehe nicht ganz, wie das funktionieren würde. – Skoota
Eine verwandte Frage: http://stackoverflow.com/questions/7338161/update-old-new-top-bottom-cells-backgroundview-when-inserting-deleting-top-bott – an0