Howdy all,

Kent's solution is also another good work around -- calling setHighlighted:NO 
on the cell will cause it to not draw highlighting, which is the source of the 
problem.

So, to summarize, there are two ways to fix this with public API:

1. In the table's delegate, -willDisplayCell: method, call setHighlighted:NO on 
the cell, and call setBackgroundStyle: to the appropriate style you want 
(light/dark)
  OR
1. Override -highlightColorWithFrame:controlView: and return nil

2. Draw the highlighting via a table subclass in highlightSelectionInClipRect:

-corbin

On Mar 14, 2010, at 3:58 PM, Keith Blount wrote:

> Hi Kent,
> 
> You're absolutely right! Thanks for sharing this. For myself, I have tables 
> and outline views that draw a custom highlight and need the text colour to 
> stay black, but your solution works for that too. The key, as you say, is 
> calling -setHighlighted: to NO on the cell in the delegate method, and that 
> is what I had missed before (given that I want to draw a highlight in my 
> table, it hadn't occurred to me that I needed to prevent the cell drawing a 
> highlight - but of course, that is all the private method was doing anyway). 
> This prevents the cell from changing its text colour but I can still draw my 
> custom highlights in the table/outline view subclasses. I need to test on 
> Tiger (which I support and where NSBackgroundStyleLight isn't supported) to 
> check that the private method isn't necessary there, but I believe you have 
> just obviated my need for the private method altogether, which is great as 
> resorting to private methods is never good - thanks! It seems you have 
> definitely found the best way of doing this.
> 
> All the best,
> Keith
> 
> From: Kent Hauser <k...@khauser.net>
> To: Keith Blount <keithblo...@yahoo.com>; Corbin Dunn <corb...@apple.com>
> Cc: cocoa-dev@lists.apple.com
> Sent: Sun, March 14, 2010 8:09:27 PM
> Subject: Re: [NSTableview] can't make selected text stay black
> 
> Now I'm all confused. Everything's working now where it wasn't before.
> 
> I'm having the desired result (selected cell not appearing selected) by 
> following Corbin's original advice: 
> 
> override NSTable's -hightlightSelectionInClipRect: to do nothing & having the 
> delegate method
> - tableView:willDisplayCell:forTableColumn:row:   perform setHighlighted:NO  
> & setBackgroundStyle:NSBackgroundStyleLight on the cell.
> 
> I'm getting backColor text as desired.
> 
> Also, if I send [cell setHighlighted:NO], the cell's 
> -highlightColorWithFrame:controlView: is not called, shao wholesale 
> subclassing of cells does not appear to be needed.
> 
> My guess as to what I had wrong before was that I had set hightlight style to 
> "source list" in IB when exploring & had not set it back to normal. I'm 
> testing now with a programmaticly generated NSTableView.
> 
> Thanks for all your help. 
> 
> Kent
> 
> On Fri, Mar 12, 2010 at 3:48 PM, Keith Blount <keithblo...@yahoo.com> wrote:
> Actually, after testing this, does overriding NSCell's 
> -highlightColorWithFrame:controlView: really have the same effect as 
> overriding the _highlightColorForCell: private message? I assume the latter 
> just calls the former, but I must be doing something wrong because overriding 
> -highlightColorWithFrame: didn't have the desired effect for me. Please see 
> the following demo project:
> 
> http://www.literatureandlatte.com/misc/BlackSelectedTableText.zip
> 
> Note that in that simple project, MyTextFieldCell overrides 
> -highlightColorWithFrame:controlView: to return nil (and there is an NSLog in 
> there to ensure it is getting called), but although doing so prevents the 
> highlight colour from getting drawn, the text still gets drawn in white (even 
> though the -willDisplayCell: delegate method in MyDocument is setting it to 
> black). Contrast this with uncommenting the _highlightColorForCell: method 
> that returns nil in MyTableView, which has the desired effect of ensuring the 
> text gets drawn in black (which is what the op was after and is the reason I 
> ended up resorting to this private message).
> 
> Am I missing something obvious? Is there something else that needs to be used 
> in conjunction with this to force the text to be drawn in black even when 
> highlighted? (To put this in context, I use NSOutlineView to provide an 
> OmniOutliner-style outline with a light blue selection, so the text needs to 
> be black even when highlighted given the light highlight, which is 
> custom-drawn.)
> 
> Many thanks and all the best,
> Keith
> 
> 
> ----- Original Message ----
> From: Corbin Dunn <corb...@apple.com>
> To: Keith Blount <keithblo...@yahoo.com>
> Cc: cocoa-dev@lists.apple.com; k...@khauser.net
> Sent: Fri, March 12, 2010 11:29:08 PM
> Subject: Re: [NSTableview] can't make selected text stay black
> 
> >
> > 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. :)
> 
> Thank you for logging the bug -- I do realize we could make this better. 
> Currently, there is a way to do it (override highlightColorWithFrame:), so 
> adding the requested method is "nice to have", but not essential.
> 
> corbin
> 
> 
> 
> 
> 
> 

_______________________________________________

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