Ich versuche, den iOS 11-Weg zu verwenden, um Swipe-Aktionen in einer Tabellenansichtszeile hinzuzufügen. Ich möchte eine Aktion hinzufügen, um eine Zeile zu löschen.UITableView - Destruktive UIContextualAction lädt keine Daten
My Prüftabelle Ansicht zeigt Zahlen von 0 bis 9, wobei die Datenquelle mit einer einfachen Matrix von ganzen Zahlen ist, die so genannten numbers
:
class ViewController: UIViewController {
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
Wenn ich eine Zeile auswählen, I den zugehörigen Wert von numbers
drucken:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(numbers[indexPath.row])
tableView.deselectRow(at: indexPath, animated: true)
}
ich den neuen Delegierten implementieren trailingSwipeActionsConfigurationForRowAt
wie folgt:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = UIContextualAction(style: .destructive, title: "Delete") { (_, _, completionHandler) in
self.numbers.remove(at: indexPath.row)
completionHandler(true)
}
return UISwipeActionsConfiguration(actions: [delete])
}
Wenn ich in einer Zeile wische, funktioniert das Löschen gut. Aber, und das ist mein Problem, wenn ich eine weitere Zeile nach dem Löschen auswählen, die zugehörige IndexPath falsch ist ...
Beispiel:
- ich die erste Zeile auswählen, gedruckt der Wert 0: OK.
- Ich lösche die erste Zeile.
- Ich wähle die neue erste Zeile, der gedruckte Wert ist 2, da der übergebene IndexPath in Parameter Zeile 1 statt Zeile 0 ist: nicht OK.
Was mache ich falsch?
Danke dafür! Ich bin ziemlich verwirrt wegen des Mangels an Dokumentation rund um den Completion-Handler. Als eines der Argumente in dem Closure-Block, der an den Initiator "UIContextualAction" übergeben wurde, ist es wahrscheinlich, dass wir nichts definieren können. – aganders3