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