Re: [NSTableview] can't make selected text stay black
Re: [NSTableview] can't make selected text stay black
- Subject: Re: [NSTableview] can't make selected text stay black
- From: Kent Hauser <email@hidden>
- Date: Tue, 9 Mar 2010 12:45:46 -1000
Keith,
Your solution was perfect. (It didn't work at first, but that's because I
had somehow left HighlightStyle as source list in IB while I was trying
everything. Per your note, the first thing I checked & then perfection.)
As you mention, overriding -highlightSelctionInClipRect is unneeded. I also
can get away with leaving out the [cell setTextColor:[NSColor blackColor]]
as long as I set the background style -- but I'm testing on 10.6 and who
knows about 10.5 and it can't hurt.
Thanks for the pointer. A five-minute task turned out to be anything but...
Kent
On Tue, Mar 9, 2010 at 8:37 AM, Keith Blount <email@hidden> wrote:
> 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 (email@hidden)
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:
This email sent to email@hidden