NSOutlineView expand / collapse animation from cod

2020-07-16 12:20发布

i'm wondering how does one animate the expansion/collapse of an NSOutlineView's tree node from code ?

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

an outline view naturally animates if you expand a node via the default-drawn arrow
so there IS a way...

2条回答
成全新的幸福
2楼-- · 2020-07-16 12:29

The problem is likely the node you are passing to collapseItem:. You need to pass the object your tree controller uses to represent the node rather than the actual node from your data model. If you are using NSTreeController, then you need to traverse the structure returned from -[NSTreeController arrangedObjects] to locate the node that represents your data model object.

查看更多
手持菜刀,她持情操
3楼-- · 2020-07-16 12:41

My original code was OK, this just wasn't available under 10.7

Original text from Application Kit Release Notes for OS X v10.8 :

NSOutlineView

The following methods now support being animated via the -animator proxy: -expandItem:, -expandItem:expandChildren:, -collapseItem:, and -collapseItem:collapseChildren:. As an example, to animate the expansion of a particular item: [[outlineView animator] expandItem:item];

查看更多
登录 后发表回答