Objective c setIgnoresMouseEvents:是不工作(例如,闪烁窗口)

Objective c setIgnoresMouseEvents:是不工作(例如,闪烁窗口),objective-c,cocoa,macos,Objective C,Cocoa,Macos,我认为我的问题最好用视频来描述: 基本上,我正在我的窗口中创建一个跟踪区域,如下所示: NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self frame] options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:self userInfo:nil]; [self addTrackingArea:area]; [area release

我认为我的问题最好用视频来描述:

基本上,我正在我的窗口中创建一个跟踪区域,如下所示:

NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self frame] options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:self userInfo:nil];
[self addTrackingArea:area];
[area release];
然后我实现了:

-(void)mouseEntered:(NSEvent *)event {
    [self toggleDetail];
}
-(void)mouseExited:(NSEvent *)event {
    [self toggleDetail];
}
awakeFromNib
中,我写下:

[attachedWindow setIgnoresMouseEvents:YES];
toggleDetail
看起来有点类似:(弹出窗口是一个
MAAttachedWindow


因此,正如您在视频中所看到的,如果我将鼠标移到窗口上远离窗口,然后将鼠标移到弹出窗口上,则不会发生“脉冲”。但是,如果我将鼠标移到弹出窗口将出现的一般附近,然后将鼠标移到窗口中,它会脉冲。窗口似乎没有时间注册它不应该接收鼠标事件。有什么想法吗?我已经绞尽脑汁想解决这个问题了

哇,太简单了。我刚想出来。我把这个叫做:

[attachedWindow setIgnoresMouseEvents:YES];
在窗口初始化之前。因此,由于某种原因,它没有注册。所以,我把它移到这里:

//in toggleDetail
attachedWindow = [[MAAttachedWindow alloc] initWithView:view 
                                            attachedToPoint:buttonPoint 
                                                   inWindow:[self window] 
                                                     onSide:12
                                                 atDistance:65.0];
[attachedWindow setIgnoresMouseEvents:YES]; //HERE it works!
[[self window] addChildWindow:attachedWindow ordered:NSWindowAbove];
所以,在初始化之后,但在显示之前。终于成功了!:)

//in toggleDetail
attachedWindow = [[MAAttachedWindow alloc] initWithView:view 
                                            attachedToPoint:buttonPoint 
                                                   inWindow:[self window] 
                                                     onSide:12
                                                 atDistance:65.0];
[attachedWindow setIgnoresMouseEvents:YES]; //HERE it works!
[[self window] addChildWindow:attachedWindow ordered:NSWindowAbove];