5

我想知道如何从代码中为 NSOutlineView 的树节点的展开/折叠设置动画

// this works ok but doesn't animate  

NSTreeNode *node = [self.outlineView itemAtRow:self.outlineView.clickedRow];

if([self.outlineView isItemExpanded:node])
{
    [self.outlineView.animator collapseItem:node];
}else{
    [self.outlineView.animator expandItem:node];
}

如果您通过默认绘制的箭头扩展节点,大纲视图自然会动画,
所以有一种方法......

4

2 回答 2

12

我的原始代码没问题,只是在 10.7 下不可用

来自OS X v10.8 的 Application Kit Release Notes 的原文

NSOutlineView

以下方法现在支持通过 -animator 代理进行动画处理:-expandItem:、-expandItem:expandChildren:、-collapseItem: 和 -collapseItem:collapseChildren:。例如,为特定项目的展开设置动画: [[outlineView animator] expandItem:item];

于 2013-05-05T17:15:15.300 回答
0

问题很可能是node您传递给collapseItem:. 您需要传递树控制器用来表示节点的对象,而不是数据模型中的实际节点。如果您使用的是 NSTreeController,那么您需要遍历从返回的结构-[NSTreeController arrangedObjects]来定位代表您的数据模型对象的节点。

于 2012-12-14T16:58:13.610 回答