2017-09-22 3 views
0

Ich bin neu in der Programmierung. Der folgende Code funktioniert mit dem Durchstreichen einer Zeile, aber nach dem Aktualisieren wird die gesamte Zeilenliste wieder angezeigt. Ich habe folgenden Code:UItableview Swipe Löschen iOS 11 aktualisiert/lädt keine Daten

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIContextualAction *delete = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive 
                     title:@"DELETE" 
                     handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { 
                      NSLog(@"index path of delete: %@", indexPath); 
                      completionHandler(YES); 


                     }]; 
    delete.backgroundColor = [UIColor purpleColor]; //arbitrary color 

    UISwipeActionsConfiguration *swipeActionConfig = [UISwipeActionsConfiguration configurationWithActions:@[delete]]; 
    swipeActionConfig.performsFirstActionWithFullSwipe = NO; 

    return swipeActionConfig; 

} 

Ich verwende folgende:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    FCell = (favouriteCell *)[tableView dequeueReusableCellWithIdentifier:@"favouriteCell"]; 
    FCell.selectionStyle=UITableViewCellSelectionStyleNone; 
    if (FCell == nil) 
    { 
     FCell = [[[NSBundle mainBundle]loadNibNamed:@"favouriteCell" owner:nil options:nil] objectAtIndex:0]; 
    } 

    FCell.nameLBL.text=[[favDetails objectAtIndex:indexPath.row] valueForKey:@"name"]; 
    FCell.poetLBL.text=[[favDetails objectAtIndex:indexPath.row] valueForKey:@"poet"]; 
    return FCell; 

} 
+0

Es scheint nicht, dass Sie die Zeile aus einer Datenquelle entfernen. Im completionHandler, in dem Sie den Indexpfad des Löschvorgangs protokollieren, müssen Sie diese Zeile aus Ihrer Datenquelle (Array usw.) entfernen. Andernfalls wird der Tisch erneut geladen, wenn er von der Datenquelle neu geladen wird. – Stephen

+0

danke, was wäre der beste Weg, es zu tun? – Simi

+0

Welche Struktur verwenden Sie als Datenquelle? Können Sie Code aus Ihrem cellForRowAtIndexPath freigeben? – Stephen

Antwort

0

Im completionHandler, wo Sie den Indexpfad des Lösch anmelden, müssen Sie diese Zeile aus der Datenquelle entfernen (Array usw.) Andernfalls wird der Tisch erneut geladen, wenn er von der Datenquelle neu geladen wird.

Ihr trailingSwipeActionsConfigurationForRowAtIndexPath Code soll wie folgt aussehen:

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath { 
     UIContextualAction *delete = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive 
                      title:@"DELETE" 
                      handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { 
                       NSLog(@"index path of delete: %@", indexPath); 
[favDetails removeObjectAtIndex:indexPath.row];             
completionHandler(YES); 


                      }]; 
     delete.backgroundColor = [UIColor purpleColor]; //arbitrary color 

     UISwipeActionsConfiguration *swipeActionConfig = [UISwipeActionsConfiguration configurationWithActions:@[delete]]; 
     swipeActionConfig.performsFirstActionWithFullSwipe = NO; 

     return swipeActionConfig; 

    } 

Damit wird das Objekt aus der Datenquelle entfernen, da die Zeile visuell aus der Tabelle entfernt wird.

+0

Vielen Dank, aber es zeigt einen Fehler. Ich habe Code von NSlog in meiner Frage hinzugefügt. – Simi

+0

Ich bin mir nicht sicher, wie der neue Code in Ihrer Frage für das Original relevant ist. Ich glaube, meine Antwort löst Ihre ursprüngliche Frage. Sie sollten wahrscheinlich eine neue Frage mit Ihrem Fehler öffnen. – Stephen

+0

Ich habe meine Antwort für Klarheit überarbeitet. – Stephen

Verwandte Themen