mouseEntered and mouseExited not called in NSImageView SubClass

cocoa, macos, nsimageview, objective-c

Solution

If You want to use `mouseEntered:` and `mouseExited:` You need to use `NSTrackingArea`. Here is reference NSTrackingArea Class Reference.

Example:

//Add this to Your imageView subclass

-(void)mouseEntered:(NSEvent *)theEvent {
    NSLog(@"Mouse entered");
}

-(void)mouseExited:(NSEvent *)theEvent
{
    NSLog(@"Mouse exited");
}

-(void)updateTrackingAreas
{ 
    [super updateTrackingAreas];
    if(trackingArea != nil) {
        [self removeTrackingArea:trackingArea];
        [trackingArea release];
    }

    int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways);
    trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds]
                                                 options:opts
                                                   owner:self
                                                userInfo:nil];
    [self addTrackingArea:trackingArea];
}

Problem

I created a subclass of `NSImageView` to capture `mouseEntered` and `mouseExited` events. But only `mouseUp` and `mouseDown` events are getting called. How to capture the `mouseEntered` and `mouseExited` events in `NSImageView` subclass?

Original source

Related problems