2

У меня есть приложение, в котором показано и скрыто окно без полей, используя orderOut и orderFront. Когда это видно, я хочу, чтобы он стал ключевым окном, когда мышь перемещается над ним. До сих пор я сделал это:Почему мой NSWindow получает только события mouseOver в первый раз?

  • В awakeFromNib Я поставил свой первый ответ на себя.
  • В конструкторе окна, который я установил, принимает события мыши в YES.
  • В методе mouseMoved я использую makeKeyAndOrderToFront.

Моя проблема в том, что это работает только при первом перемещении мыши над окном. После этого он не получает никаких событий mouseOver. Я пробовал проверять firstResponder, но насколько я могу судить, он никогда не меняется из окна.

Любые идеи, что я могу сделать, чтобы это работало?

ответ

3

Вам необходимо добавить tracking area, если вы хотите получать mouseMoved события (я предполагаю, что это то, что вы имеете в виду, поскольку у Cocoa нет такой вещи, как событие mouseOver).

Я написал небольшое приложение под названием Shroud, которое делает что-то похожее - он скрывает окно без полей, которое закрывает панель меню, когда вы наводите на нее курсор мыши. code достаточно прост, он может быть полезен в качестве примера.

1

Вот пример написан с помощью answer@NicholasRiley «s:

NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self.view frame] options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways owner:self userInfo:nil]; 
[self.view addTrackingArea:area]; 

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

-(void)mouseExited:(NSEvent *)theEvent { 
    NSLog(@"mouseExited"); 
} 
Смежные вопросы