Ich implementiere Drag & Drop/Neuordnung in einem NSOutlineView
.NSTableView/NSOutlineView neu laden angegebene Zeilen
Meine Daten ist wie folgt:
Root
Child1
Child2
Child3
Der Benutzer kann die Kinder per Drag & Drop neu anordnen.
Wenn ich reloadData(forRowIndexes:columnIndexes:)
in der Methode Umgang mit dem Tropfen, die NSOutlineView
nicht aktualisiert, während ein einfaches reloadData()
gut funktioniert.
Ich wollte, dass meine App so effizient wie möglich ist, also wie benutzt man diese reloadData(forRowIndexes:columnIndexes:)
?
Der zugehörige Code ist hier:
info.enumerateDraggingItems(
options: .clearNonenumeratedImages,
for: self.outlineView,
classes: classes,
searchOptions: [:])
{ [unowned self] (
draggingItem: NSDraggingItem,
idx,
stop) -> Void in
let dragged = self.currentlyDraggedObjects![idx] as! RowItem
let oldParent = dragged.parent!
let siblings = oldParent.children
let oldIndex = siblings?.index(where: { (item) -> Bool in
item.identifier == dragged.identifier
})
oldParent.moveChild(from: oldIndex!, to: insertionPos)
let parentRow = self.outlineView.row(forItem: item)
let reloadRowRange = oldIndex! < insertionPos ?
(oldIndex! + parentRow + 1)...(insertionPos + parentRow + 1)
: (insertionPos + parentRow + 1)...(oldIndex! + parentRow + 1)
#if DEBUG
print(#file, #line, reloadRowRange)
#endif
// self.outlineView.reloadData() // This works!
// Doesn't work, why?
self.outlineView.reloadData(
forRowIndexes: IndexSet(reloadRowRange),
columnIndexes: IndexSet(integer: 0)
)
}
nicht nachladen Sie, verschieben (oder entfernen und einfügen) die Reihen. – Willeke
Danke! Die Animation für den Umzug scheint zu viel. So endete ich mit Entfernen und Einfügen. – LShi