如何在NSOutlineView中搜索不可见的项目?

时间:2019-11-28 21:42:39

标签: swift xcode macos cocoa

我有一个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中可见,则上述代码有效。

找到不可见的项目后,如何使其可见以便我可以选择它?

1 个答案:

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

您不一定必须先折叠所有项目,但我喜欢这种功能。