2015-01-28 8 views
9

Ich habe ein tableView in dem ich damit die Zelle klauen Optionen anzuzeigen - in meinem Fall ‚teilen‘ und Optionen ‚löschen‘ nach der folgenden Methode:Was ist die richtige Methode zum Entfernen der aufgedeckten Swipe eines UITableViewCell bei Verwendung von editActionsForRowAtIndexPath :?

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

, wenn ein Benutzer klaut auf eine Zelle, um die Optionen zu offenbaren und dann auf delete tippen Ich legte eine UIAlertController mit einer Bestätigung. alles ist gut und gut, wenn sie gelöscht werden sagen, wie ich das Objekt in meinen Stammdaten-Datenbank und meine NSFetchedResultController darauf, die von der Aktualisierung tableView

nimmt löschen Wenn der Benutzer mit dem Löschen gehen durch lehnt dann die Zelle bleibt mit dem Schieber Effekt zeigt immer noch die Möglichkeiten auf. Ich möchte, dass es weggeht. Ich weiß, dass [tableView reloadData] oder, effizienter, nur das Neuladen der einen Zelle wird das Problem lösen, aber gibt es einen Methodenaufruf oder eine Eigenschaft auf der Zelle, die ich verpasst habe, die den Job machen würde?

Antwort

4

Wenn Sie auf der Tabellenansicht Editierendpunkt hier wird es die Zelle wieder in den Normalzustand animieren.

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { 
    [table setEditing:NO animated:YES]; 
} 

Wenn die Tabelle in einem Bearbeitungszustand war, wo es auf die Schaltfläche Löschen jeder Zelle neben zeigt, wird dies alle diese Löschtasten verursachen weg zu gehen, das ist nicht das Verhalten sein kann, die Sie wollen. In diesem Fall können Sie die Tabellenansicht sofort in den Bearbeitungsmodus zurückversetzen. Die Animation sieht gut aus:

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { 
    [table setEditing:NO animated:YES]; 
    if (yourWasPreviouslyEditingBoolean) { 
     [table setEditing:YES animated:YES]; 
    } 
} 

Beachten Sie, dass Sie diesen Status selbst verfolgen müssen. Wenn Sie den isEditing-Wert der Tabellenansicht überprüfen, wird hier immer true zurückgegeben.

Ich konnte nicht finden, um die Zelle direkt zu sagen, die Bearbeitung zu beenden.

1

Also, Ihre Frage ist, wie man eine bestimmte Zelle auf einem UITableView neu laden? Nicht schwer.

Der folgende Code wird der Trick: -

NSIndexPath * indexpath = [NSIndexPath indexPathForRow:self.deletedTableRow 
              inSection: self.deletedTableSection]; 
[self.tableView beginUpdates]; 
[self.tableView reloadRowsAtIndexPaths:@[indexpath] 
         withRowAnimation:UITableViewRowAnimationNone]; 
[self.tableView endUpdates]; 
+0

Prost Ricky -Thanks für die Zeit zu nehmen, dass Code-Snippet - aber das war nicht das, was ich gesucht habe. Ich weiß, wie man eine einzelne Zelle neu lädt. Was ich gefragt habe, ist, dass ein bestimmter Aufruf einer Zelle dazu führt, dass die aufgedeckten Optionen aus dem Blickfeld verschwinden, oder war es nur, dass Sie die Zelle neu laden mussten, um diesen Effekt zu erreichen - was ich getan hatte. Danke trotzdem – SimonTheDiver

+2

Ich denke, die Antwort ist - Sie müssen die Zelle neu laden! –

+0

@SimonTheDiver [tableView reloadData] lädt die gesamte TabelleView neu, was nicht gut ist, wenn Sie viele Daten haben. Meine obige Lösung lädt nur eine einzelne Zelle neu, die Sie neu laden müssen. Über die Animation und etc, die Sie erwähnt haben, hängt alles von Ihrer UITableViewCell/UITableView Delegates-Methode ab. Sie können sogar einen völlig anderen UITableViewCell-Typ mit dem obigen Code ändern. – Ricky

0

Das Problem mit dem Zurücksetzen einer benutzerdefinierten Schaltfläche auf der Navigationsleiste wurde behoben. Ich hatte UITableViewController und UINavigationController. Die Aktion "Benutzerdefinierte Zurück-Schaltfläche" (implementiert) verhält sich wie WillDisappear.

Seien Sie vorsichtig für die Swipe "Zurück" Geste obwohl.

Verwandte Themen