View Full Version : [cell setTransparent] in NSOutlineView

Apr 11, 2009, 05:39 PM
I am using this method to hide the disclosure triangle, in nonexpandable items in an NSOutlineView:

- (void)outlineView:(NSOutlineView *)theOutlineView willDisplayOutlineCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
 if ([item count] == 0)
[cell setTransparent:YES];
[cell setTransparent:NO];

it does what i want, but slows the OutlineView down to a crawl. Is there a better way to implement this?
I only want a disclosure triangle shown for expandable items... not every item in my OutlineView.

thanks in advance

<edit>Should mention, I am using NSTreeController for the Datasource</edit>

Apr 13, 2009, 07:02 AM
I've never used NSTreeController before, but try implementing an isLeaf method in your object. From the docs:
You can optionally provide a leaf key path that specifies a key in your model object that returns YES if the object is a leaf node, and NO if it is not. Providing this key path prevents the NSTreeController from having to determine if a child object is a leaf node by examining the child object and as a result improve performance.

Edit: if you're targeting 10.5+ with your app, it might help to make your node objects a subclass of NSTreeNode.