Ich habe meinen Kopf über diesen geschlagen, und Google hat nichts aufgetaucht. Ich habe es schließlich ausgearbeitet und dachte, ich würde es hier für die nächste Person aufschreiben.
Sie haben eine UITableView
mit mehreren Abschnitten. Jeder Abschnitt ist homogen, aber die Tabelle insgesamt ist heterogen. So möchten Sie vielleicht Nachbestellung von Zeilen innerhalb eines Abschnitts ermöglichen, aber nicht über Abschnitte. Vielleicht möchten Sie nur, dass ein Abschnitt überhaupt nachbestellbar ist (das war mein Fall). Wenn Sie wie ich auf die schauen, werden UITableViewDataSourceDelegate
Sie keine Benachrichtigung finden, wann Sie eine Zeile zwischen Abschnitten verschieben können. Sie erhalten eine, wenn eine Zeile verschoben wird (was in Ordnung ist), und eine, wenn sie bereits verschoben wurde, und Sie haben die Möglichkeit, sich mit Ihren internen Daten zu synchronisieren. Nicht hilfreich.
Wie können Sie Nachbestellungen zwischen Abschnitten verhindern?
Ich werde das, was ich getan habe, als separate Antwort veröffentlichen und es jemand anderem offen lassen, eine noch bessere Antwort zu veröffentlichen!
quelle
Antworten:
Diese Implementierung verhindert eine Neuordnung außerhalb des ursprünglichen Abschnitts wie Phils Antwort, fängt jedoch auch den Datensatz in der ersten oder letzten Zeile des Abschnitts ein, je nachdem, wohin das Ziehen gegangen ist, anstatt wo es begonnen hat.
quelle
UIKit.UITableViewController.CustomizeMoveTarget
für alle, die sich fragen.Wirklich einfach genug.
Das UITableViewDelegate hat die Methode:
Dies wird aufgerufen, während der Benutzer über einem potenziellen Ablagepunkt schwebt. Sie haben die Möglichkeit zu sagen: "Nein! Lassen Sie es nicht dort fallen! Lassen Sie es stattdessen hier fallen." Sie können einen anderen Indexpfad als den vorgeschlagenen zurückgeben.
Ich habe nur überprüft, ob die Abschnittsindizes übereinstimmen. Wenn sie dann großartig abschneiden, geben Sie den vorgeschlagenen Pfad zurück. Wenn nicht, geben Sie den Quellpfad zurück. Dies verhindert auch, dass sich die Zeilen in anderen Abschnitten beim Ziehen sogar aus dem Weg räumen - und die gezogene Zeile wird an ihre ursprüngliche Position zurückschnappen, wenn Sie versuchen, sie in einen anderen Abschnitt zu verschieben.
quelle
Schnelle schnelle Version von Jasons Antwort für Sie faulen Leute:
Swift 3, 4 & 5
Swift 1 & 2
quelle
Sie können die Verschiebung von Zeilen zwischen Abschnitten mithilfe der folgenden Methode verhindern. Lassen Sie einfach keine Bewegung zwischen den Abschnitten zu. Sie können sogar die Bewegung einer bestimmten Zeile innerhalb eines Abschnitts steuern. zB letzte Zeile in einem Abschnitt.
Hier ist das Beispiel:
quelle
Swift 3:
quelle
Als @Jason Harwig funktioniert der folgende Code korrekt.
quelle
Um die Position zwischen den Abschnitten Swift3 nicht zu ändern
quelle