我有一个NSOutlineView,它通过数据源子类填充。但是我一直在尝试在大纲视图中搜索项目。如果该项目不可见,则outlineView.row(forItem: item)
返回-1
。那么,如何找到不可见的物品?
我可以从数据源获取项目行,但是只有在可见的情况下才找到它,在不可见时返回-1。
let row = outlineView.row(forItem: file)
if row != -1 {
outlineView.selectRowIndexes(NSIndexSet(index: row) as IndexSet, byExtendingSelection: false)
}
如果该项目在outlineView中可见,则上述代码有效。
找到不可见的项目后,如何使其可见以便我可以选择它?
答案 0 :(得分:0)
这是我的解决方案:
private func select(_ indexPath:IndexPath) {
// Make visible the found item
// First, collapse all items
self.outlineView.collapseItem(nil, collapseChildren: true)
// Second, start with the root item and start expanding the tree
var children = self.treeController.arrangedObjects.children
for point in indexPath {
if children != nil {
let item = children![point]
self.outlineView.expandItem(item)
children = item.children
}
}
// third, select the item
self.treeController.setSelectionIndexPath(indexPath)
}
您不一定必须先折叠所有项目,但我喜欢这种功能。