NSOutlineView расширить дочерние - PullRequest
0 голосов
/ 20 марта 2020

У меня есть NSOutlineView, где я пытаюсь реализовать возможность поиска и замены, но проблема в том, что все узлы не расширяются.

let nodes : [NSTreeNode] = self.getNode(contains: "any word")

for node in nodes {
  self.outlineView.expandItem(node.parent) // that only work for short index path

  let row = self.outline.row(forItem: item)
    if row >= 0 {
      self.outlineView.scrollRowToVisible(row)
      self.outlineView.selectRowIndexes(IndexSet(integer: row), byExtendingSelection: false)
    }
}

Проблема в том, что узлы на определенном уровне не не расширяется.
Как я могу начать расширение NSTreenode, начиная с начального родительского узла до последнего дочернего родителя, который содержит мой поиск?

1 Ответ

1 голос
/ 22 марта 2020

Рекурсия, разверните родительский объект перед расширением узла:

func expandNode(_ node:NSTreeNode) {
    if let parent = node.parent {
        if !outlineView.isItemExpanded(parent) {
            self.expandNode(parent)
        }
    }
    outlineView.expandItem(node)
}

self.expandNode(node)

Итерации по node.indexPath:

var treeNode = treeController.arrangedObjects
node.indexPath.forEach { index in
    treeNode = treeNode.children![index]
    if !outlineView.isItemExpanded(treeNode) {
        outlineView.expandItem(treeNode)
    }
}
...