Cocoa 为什么我的NSWindow第一次只接收鼠标悬停事件?

Cocoa 为什么我的NSWindow第一次只接收鼠标悬停事件?,cocoa,mouseover,nswindow,first-responder,makekeyandordertofront,Cocoa,Mouseover,Nswindow,First Responder,Makekeyandordertofront,我有一个应用程序,使用orderOut和orderFront显示和隐藏无边界窗口。当它是可见的,我希望它成为关键点窗口时,鼠标移动到它。 到目前为止,我已经做到了: 在awakeFromNib中,我将其第一个响应者设置为自身 在窗口的构造函数中,我将accepts mouse events设置为YES 在mouseMoved方法中,我使用makekeyanddertofront 我的问题是,这只在我第一次将鼠标移到窗口上时起作用。 之后,它不会收到任何鼠标悬停事件。 我已经试着检查了第一响应

我有一个应用程序,使用orderOut和orderFront显示和隐藏无边界窗口。当它是可见的,我希望它成为关键点窗口时,鼠标移动到它。 到目前为止,我已经做到了:

  • 在awakeFromNib中,我将其第一个响应者设置为自身
  • 在窗口的构造函数中,我将accepts mouse events设置为YES
  • 在mouseMoved方法中,我使用makekeyanddertofront
我的问题是,这只在我第一次将鼠标移到窗口上时起作用。 之后,它不会收到任何鼠标悬停事件。 我已经试着检查了第一响应者,但据我所知,它从未从窗口改变

如果你想接收
mouseMoved
事件(我想这就是你的意思,因为Cocoa没有
mouseOver
事件)


我编写了一个名为裹尸布的小应用程序,它做了类似的事情——当你把鼠标移到菜单栏上时,它会隐藏一个无边界窗口,覆盖菜单栏。这个例子很简单,可以作为一个例子使用。

下面是一个借助的例子:

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