2012-06-25 1 views

ответ

69

Если вы хотите использовать mouseEntered: и mouseExited: Вам необходимо использовать NSTrackingArea. Вот ссылка NSTrackingArea Class Reference.

Пример:

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

Просто еще один "почему я должен иметь дело с этим дерьмом" момент с API для Apple. – ArtOfWarfare

+14

@ArtOfWarfare Или это реальность наличия сложной иерархии представлений и нежелание вызывать потенциально сотни тысяч методов, когда пользователь просто перемещает указатель на кусок пользовательского интерфейса. Это возрастной возраст ** Никогда не проводите опрос, всегда тяните. ** – bbum

+0

Бинго, работает как шарм – Pete

5

Swift 3 версию ответа @Justin Boo «s:

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) 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^