I my outline view, i am adding Custom cell, To drawing custom cell, i am referring example code , present in the Cocoa documentation
http://www.martinkahr.com/2007/05/04/nscell-image-and-text-sample/
I want to change the disclosure image of the cell with my custom image, i have tried following things
- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
{
if([item isKindOfClass:[NSValue class]])
{
MyData *pDt = (MyData *)[item pointerValue];
if(pDt->isGroupElement())
{
[cell setImage:pGroupImage];
}
}
}
but that too not working, Is there any other way to change the disclosure image, also how can i find out in willDisplayCell whether Item is expand or collapse, so i can set the image accordingly,
Is this only the place to change the disclosure image ?
After researching this issue myself, and trying some of the answers here, I have found that the other approaches mentioned will work, but will require that you perform a lot more manual intervention in order to avoid screen artifacts and other strange behavior.
The simplest solution I found is the following, which should work in most cases.
This solution has the added benefit of the system automatically handling a great many other cases, such as column movement, etc, without your involvement.
In your case, you would wrap this up with your class detection logic, and set the cell images appropriately for your cases.
You've got the basic idea but what you will need to do is draw the image yourself. Here's the code I use:
You will need 3 different images as you can see, one for the
ON
state, one for theOFF
state and also one for theMIXED
state which should be halfway between the two. The mixed state makes sure you still get the opening and closing animation.A nice way to change the disclosure image is to use a view based outline view:
In your ViewController with NSOutlineViewDelegate:
You have to subclass your NSOutlineView and overide the method:
For who looks for Swift2 Solution. Subclass NSRow of your outlineview and override didAddSubview method as below.
This is what i have tried and working so far,
/* because we are showing our own disclose and expand button */
I have subclassed NSOutlineView class and override these methods,
[self isGroupItem] is to check whether its group or not. but got one problem, now looks like mousehandling i need to do :( , on double clicking group row is not toggling