从代码实现NSOutlineView的展开/折叠动画

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];
}

如果您通过默认绘制的箭头展开节点,则大纲视图会自然地进行动画处理。
因此,有一种方法可以实现这个功能...

2个回答

12

我的原始代码还不错,只是在10.7版本下不可用。

来自OS X v10.8应用程序套件发行说明的原始文本:

NSOutlineView

现在以下方法支持通过-animator代理进行动画:-expandItem:,-expandItem:expandChildren:,-collapseItem:和-collapseItem:collapseChildren:。例如,要对特定项的扩展进行动画:[[outlineView animator] expandItem:item];


你能链接到发布说明中标明的地方吗? - zakdances
完成。所述文本位于NSOutlineView部分。 - Nightbirdsevolve
2
如果您正在使用Swift,当您尝试键入outlineView.animator().ex时,Xcode中将无法获得自动完成。也许这是一个错误。但是,如果您手动键入outlineView.animator().expandItem(item),它实际上可以正常工作。 - Edward Anthony

0
问题可能出在您传递给collapseItem:node上。您需要传递树控制器使用的表示节点的对象,而不是来自数据模型的实际节点。如果您正在使用NSTreeController,则需要遍历从-[NSTreeController arrangedObjects]返回的结构,以查找代表数据模型对象的节点。

1
嗨,我已经成功通过代码打开/折叠了。我的问题是如何实现动画效果。 - Nightbirdsevolve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接