gpt4 book ai didi

swift - NSTableView/NSOutlineView 重新加载指定行

转载 作者:行者123 更新时间:2023-11-28 12:15:45 25 4
gpt4 key购买 nike

我正在 NSOutlineView 中实现拖放/重新排序。

我的数据是这样的:

Root
Child1
Child2
Child3

用户将能够通过拖放对子项重新排序。

如果我在处理 Drop 的方法中使用 reloadData(forRowIndexes:columnIndexes:)NSOutlineView 不会更新,而简单的 reloadData() 可以正常工作。

我希望我的应用程序尽可能高效,那么如何使用此 reloadData(forRowIndexes:columnIndexes:)

相关代码在这里:

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)
)
}

最佳答案

感谢@Willeke 的评论,现在行已正确更新,作者:

self.outlineView.removeItems(at: IndexSet(integer: oldIndex!),
inParent: oldParent)
self.outlineView.insertItems(at: IndexSet(integer: newIndex),
inParent: oldParent)

关于swift - NSTableView/NSOutlineView 重新加载指定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46689701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com