I'm creating a custom subclass of NSPopUpButton and NSPopUpButtonCell to display a lone icon on top of the button instead of the usual text.
To do this I'm overriding
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
in my button cell subclass to draw my icon at the appropriate size and location. When the user mouses over the button I then want to change the image. My only problem is I can't figure out how to make the button cell redisplay (by calling drawInterior... again). By default it only seems to redisplay when the button is clicked or when focus is moved to another window. I've tried setNeedsDisplay:YES but that doesn't seem to do it.
The way I found to do this was to insert a call to
[self updateCell:self.cell];
inside my NSPopUpButton subclass immediately after any point I changed the image displayed by the cell.