1

我正在尝试解决一个简单的问题,即仅扩展NSOutlineView中的根项目但没有运气。我可以展开所有项目和选定项目,但我似乎无法弄清楚如何准确地确定如何仅扩展根节点。大纲视图显示文件夹树,我想显示根文件夹下可用的文件夹,但我不想展开文件夹子项。

我目前尝试设置我的 NSTreeController 的 selectionIndexPath ,然后在大纲视图中展开选择:

 NSIndexPath *indexPath;
 NSUInteger section = [indexPath indexAtPosition:0];
 NSIndexPath *ip = [NSIndexPath indexPathWithIndex:section];
 [outlineView collapseItem:nil collapseChildren:YES];

 [self.treeController setSelectionIndexPath:ip];
 [outlineView expandItem:[self.treeController selectionIndexPath]];

这不起作用。非常感谢有关如何正确解决此问题的建议。

干杯,特隆德

解决方案: 我已经拥有的和@PaulPatterson 建议的以下组合完美地工作:

[outlineView collapseItem:nil collapseChildren:YES];
NSIndexPath *indexPath;
NSUInteger section = [indexPath indexAtPosition:0];
NSIndexPath *ip = [NSIndexPath indexPathWithIndex:section];
[outlineView collapseItem:nil collapseChildren:YES];

[self.treeController setSelectionIndexPath:ip];
id node = [[self.treeController selectedNodes] firstObject];
[outlineView expandItem:node];
4

1 回答 1

1

[-NSOutlineView expandItem:]问题是预期的值与返回的值不匹配[-NSTreeController selectionIndexPath]吗?

就目前而言,您的传递是NSIndexPath实例到expandItem:. 我很欣赏它expandItem:对于它期望的特定类作为它的参数是不可知的(文档声明它接受任何对象 - id),但我的经验是它需要一个node对象 - 包含在由返回的数组中的对象类型[-NSTreeController selectedNodes]。尝试以下操作:

if ([[self.treeController selectedNodes] count] == 1) {
    id node = [[self.treeController selectedNodes] firstObject];
    [outlineView expandItem:node];
}
于 2014-11-13T08:58:03.280 回答