Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
UITableViewCell: Löschen von Einträgen

Einige iOS-Anwendungen, die ein UITableView verwenden, erlauben es dem Nutzer, während der Laufzeit des Programms Einträge aus der Tabelle zu entfernen. Dazu streicht der Anwender für gewöhnlich über die Zelle, woraufhin eine Löschen-Schaltfläche angezeigt wird. Diese Funktionalität ist ebenfalls leicht zu implementieren, wobei sich die Aufgaben der Tabelle auf den grafischen Teil beschränken. Wollen Sie tatsächlich ein Objekt löschen, müssen Sie die nötigen Anweisungen selbst programmieren.

Im ersten Schritt ist es zunächst erforderlich, das Bearbeiten der Zelle zu erlauben. Dafür genügt es, aus der Methode tableView:canEditRowAtIndexPath ein YES zurück zu geben. Diese Methode ist Teil des UITableViewDataSource-Protokoll und muss ebenfalls nicht im Header der Klasse deklariert werden.
- (BOOL)tableView:(UITableView *)tableView
     canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
Das tatsächliche Löschen der Tabellenzellen und auch der Daten geschieht in der tableView:commitEditingStyle-Methode, wobei man darauf achten muss, das Daten-Objekt vor der angezeigten Zelle zu entfernen, da das TableView-Steuerelement schon die zukünftige Anzahl der Objekte benötigt.
Um für unsere Anwendung die richtigen alternierenden Hintergrundfarben wiederherzustellen, genügt der Aufruf von reloadData, das Löschen funktioniert jedoch auch ohne diese Anweisung ohne Probleme.
- (void)tableView:(UITableView *)tableView
     commitEditingStyle:(UITableViewCellEditingStyle)
     editingStyle forRowAtIndexPath:
     (NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        // Zunächst das richtige Objekt entfernen.
        Country *aCounty = [countryArray
          objectAtIndex:indexPath.row];
        [countryArray removeObject:aCounty];
               
        // Jetzt die Tabellenzelle löschen
        // Eine Animation gibt es gleich dabei.
        [tableView deleteRowsAtIndexPaths:
        [NSArray arrayWithObject:indexPath]
        withRowAnimation:UITableViewRowAnimationFade];
       
        // Optional, Tabelle komplett neu aufbauen.
        [tableView reloadData];
    }
}
stacks_image_19F17C81-8195-4449-BB5B-E638EF59434D