I'm trying to subclass NSCell
to draw a custom background highlight. The documentation seems to suggest that the overriding highlight:withFrame:inView:
should allow me to do this but the method is never called.
Instead, I've overridden drawInteriorWithFrame:inView:
which works fine - I can draw what I want in the cell. However, the issue is that I have to draw everything myself, losing the functionality of the type of NSCell I am extending - for example an NSTextFieldCell's ability to display text:
Custom drawn highlighted cell:
However, I just want to redraw the background (the highlight), and retain the ability to use the main functionality of the extended cell:
I could, of course, just draw the text myself too but I'm hoping there is an easier way of doing this.
Any help is much appreciated.
Thanks to the help of @Bavarious I've managed to work it out. My extended NSTextFieldCell class implementation now contains:
-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
return nil;
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
if ([self isHighlighted]) {
// Draw highlight background here
}
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
The key is to make sure you return nil
for highlightColorWithFrame:inView:
to stop drawInteriorWithFrame:inView:
drawing a background and yet still calling it to draw the main content (in this case text).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With