Hi,

Actually the only way I know of doing this pre-10.6 is to override 
NSTableView's private _highlightColorForCell: method to return nil. Even if you 
override -highlightSelectionInClipRect: to do nothing, the cell drawing will 
still use the highlight colour returned from this private method.

So the correct settings pre-10.6 are:

The table view's selectionHighlightStyle must be set to 
NSTableViewSelectionHighlightStyleRegular (if it's set to source list style, 
NSTableView seems to do things completely differently).

In your table view delegate's - tableView:willDisplayCell:forTableColumn:row: 
method, set the cell background style to light and the text colour to black:

[aCell setBackgroundStyle:NSBackgroundStyleLight];
[aCell setTextColor:[NSColor blackColor]];

Then, in your NSTableView subclass, have the private method return nil:

- (id)_highlightColorForCell:(NSCell *)cell
{
return nil;
}

(You can also override -highlightSelectionInClipRect: to do nothing just to be 
sure, but the above should be all it takes.)

That should have the effect you're after.

Hope that helps.
All the best,
Keith

P.S. I'm hesitant about mentioning private methods here, but I don't think 
there's another way of doing it - I filed an enhancement request for this 
method to be made public back in April '06, ID#4521167, so please do the same 
if you think it would be useful. I'm CC'ing Corbin so he can straighten me out 
on the private method thing if this is totally the wrong advice, but it works 
for me. :)
On Mar 5, 2010, at 2:25 PM, Kent Hauser wrote:

> Hi,
> 
> I'm trying to make a NSTableView selected row not look selected. I
> subclassed NSTableView & added the following class & delegate methods:
> 
> // remove selection indication
> - (void)highlightSelectionInClipRect:(NSRect)clipRect
> {
>    NSLog (@"%s", __FUNCTION__);
> }
> 
> // change selected cell text color (delegate method)
> - (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell
> forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)rowIndex
> {
>    NSLog (@"%s", __FUNCTION__);
>    if ([cell respondsToSelector:@selector(setTextColor:)])
>        [(id)cell setTextColor:[NSColor blackColor]];
> }
> 
> While the "hightlightSelection" method does it's job, my delegate method
> doesn't paint the text black. (However, if I use redColor, I get red text).
> 
> What am I missing


      
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to