Подтвердить что ты не робот

MouseEntered и mouseExited не вызываются в подклассе NSImageView

Я создал подкласс NSImageView для захвата событий mouseEntered и mouseExited. Но вызываются только события mouseUp и mouseDown. Как захватить события mouseEntered и mouseExited в подклассе NSImageView?

4b9b3361

Ответ 1

Если вы хотите использовать mouseEntered: и mouseExited:, вам нужно использовать NSTrackingArea. Вот ссылка Ссылка на класс NSTrackingArea.

Пример:

//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];
}

Ответ 2

Swift 3 Версия @Justin Boo ответ:

private var trackingArea: NSTrackingArea?

override func updateTrackingAreas()
{
    if let trackingArea = self.trackingArea
    {
        self.removeTrackingArea(trackingArea)
    }

    let options: NSTrackingAreaOptions = [.mouseEnteredAndExited, .activeAlways]
    let trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)
    self.addTrackingArea(trackingArea)
}