2016-05-07 9 views
0

Ich entwickle gerade eine iOS-Anwendung in Apples Swift.Wie kann der Bearbeitungsmodus der Tabellenansichtszelle in der Tabellenansicht beibehalten werden, selbst wenn die Tabellenansichtszelle aktualisiert wird?

Ich habe eine Tabellenansicht mit Tabellenzellen darin, von denen jedes die aktuelle Zeit eines Timers anzeigt (es ist kein echter Timer, es ist eigentlich nur ein Zeitstempel).

Die Anwendung selbst verfügt über einen Timer, der die sichtbare Zelle der Tabellenansicht mit den aktuellen Zuständen der Zellentimer aktualisiert.

Die Anwendung bietet die Möglichkeit, eine Zelle zu verschieben, die eine Schaltfläche zum Löschen erscheinen lässt.

Das Problem, mit dem ich konfrontiert bin, ist, dass die Schaltfläche Löschen sofort aufgrund der Tatsache verschwindet, dass die Zelle vom Timer der Anwendung aktualisiert wird. Hier

ist der Code, wo die Tabellenansicht Zellen aktualisiert werden:

// Update visible rows in table 
func updateTable() { 
    // Get all visible cells 
    let cells = timerTable.visibleCells as! Array<TimerTableViewCell> 

    for cell in cells { 
     let indexPath = timerTable.indexPathForCell(cell) 
     cell.timeLabel.text = String(timerArray[indexPath!.row].getRemainingTimeAsString()) 
     timerTable.reloadRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.None) 
    } 
} 

Ich würde mich freuen, wenn jemand eine Lösung/Abhilfe für mein Problem haben würde.

Vielen Dank im Voraus.

+0

Können Sie den Code anzeigen, wo Ihr Timer die Zelle aktualisiert? – pbasdf

+0

@pbasdf Ich habe meinen Beitrag aktualisiert. – mian

+0

Danke. Vermeiden Sie die Verwendung von 'reloadRowsAtIndexPaths': Es baut die Zelle vollständig neu auf und zerstört somit den Status" Löschen ". Der aktualisierte Etikettentext sollte angezeigt werden, ohne dass ein neuer Ladevorgang erforderlich ist. – pbasdf

Antwort

1

Ich denke, die einfachere Lösung ist Ihre reloadRowsAtIndexPaths Anruf zu entfernen, und aktualisieren Sie einfach die timeLabel. Sie könnten versuchen, diese:

// Update visible rows in table 
func updateTable() { 
    // Get all visible cells 
    let cells = timerTable.visibleCells as! Array<TimerTableViewCell> 

    for cell in cells { 
     let indexPath = timerTable.indexPathForCell(cell) 
     cell.timeLabel.text = String(timerArray[indexPath!.row].getRemainingTimeAsString()) 
    } 
} 

Weil reloadRowsAtIndexPaths sagt zum UITableView: Hey, nehmen Sie nur die Zeilen an Thesen indexPaths und wieder aufzubauen, sie von Grund auf neu. Ignoriere seinen vorherigen Status.

Verwandte Themen