reloadData in NSTableView aber aktuelle Auswahl
Ich habe eineNSTableView
zeigt den Inhalt eines Verzeichnisses auf. Ich beobachte für FSEvents, und jedes mal bekomme ich eine Veranstaltung, die ich neu laden meiner Tabelle anzeigen.
Leider ist die aktuelle Auswahl und dann verschwindet. Gibt es eine Möglichkeit das zu vermeiden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, wie füllen Sie Ihre NSTableView.
Wenn Sie die Tabelle anzeigen, gebunden an einen NSArrayController, die wiederum enthalten Elemente, die Ihre Tabelle-Ansicht angezeigt wird, dann die NSArrayController hat eine option behalten Sie die Auswahl. Sie können wählen Sie es (oder nicht) innerhalb der Interface Builder als eine Eigenschaft der NSArrayController. Oder Sie können die
setPreservesSelection
- Methode im code.Jedoch, wenn Sie komplett ersetzen Sie das array von Elementen, die der NSArrayController schafft es jedes mal, wenn Sie Ihre FSEvents, dann vielleicht die Erhaltung der Auswahl, nicht arbeiten kann. Leider ist die Apple docs auf diese Eigenschaft des NSArrayController sind ein bisschen vage, wenn es kann und nicht bewahren der Auswahl.
Wenn Sie nicht über einen NSArrayController, aber vielleicht mit einer dataSource zum füllen der Tabelle anzeigen, dann denke ich, werden Sie zu bewältigen haben, die Auswahl Sie sich.
Gut, Sie können die Auswahl speichern Sie vor dem Aufruf reloadData, und stellen Sie Sie danach.
Dieser arbeitete für mich, in einigen Fällen. Aber wenn Sie fügen Sie einige Elemente, die VOR der ausgewählten Zeile, sollten Sie andjust Ihre Zeilen-variable, indem Sie Anzahl der hinzugefügten Elemente.
Swift 4.2
Erstellen Sie eine Erweiterung und eine Methode hinzufügen, die bewahrt Auswahl.
Tun in diesem Fall verwenden Sie die traditionelle Art und Weise durch das Auffüllen der Tabelle Ansichten (nicht NSArrayController).
Im Falle der Verwendung von Daten-Source -, Apple-Dokumentation in der header-Datei auf
reloadData()
ist, dassHerum zu erhalten, können Sie
reloadDataForRowIndexes(rowIndexes: NSIndexSet, columnIndexes: NSIndexSet)
. Wie bereits erwähnt, in der gleichen header-DateiDamit die Daten neu geladen, und die Auswahl ist gehalten als gut.
Variante @silvansky Antwort.
Dieser hat keine Notwendigkeit zu verfolgen, Anzahl der Elemente, die eingefügt/gelöscht werden. Und es unterhält mehrere Auswahl.
Die Idee ist, zu...
1. erstellen Sie ein array der ausgewählten Objekte/Knoten aus der aktuellen Auswahl.
2. aktualisieren Sie die Tabelle mit reloadData
3. für jedes Objekt, das in Schritt 1 erhalten haben, finden Sie/nimm es neue index
4. sagen Sie der Tabelle Ansicht/Gliederungsansicht, wählen Sie die aktualisierte index gesetzt