Почему мой NSWindow только получает события mouseOver в первый раз? - PullRequest
2 голосов
/ 17 мая 2010

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 17 мая 2010

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

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

1 голос
/ 25 мая 2016

Вот пример, написанный с помощью @ NicholasRiley answer :

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");
}
...