Objective c 即使主窗口未激活,NSPopover也会显示

Objective c 即使主窗口未激活,NSPopover也会显示,objective-c,cocoa,nspopover,Objective C,Cocoa,Nspopover,我以编程方式显示了一个popover,如下所示: popover = [NSPopover new]; popover.contentViewController = popoverController; popover.animates = YES; popover.delegate = popoverController; popover.behavior = NSPopoverBehaviorSemitransient; [popover showRelativeToRect:[

我以编程方式显示了一个popover,如下所示:

popover = [NSPopover new];    
popover.contentViewController = popoverController;
popover.animates = YES;
popover.delegate = popoverController;
popover.behavior = NSPopoverBehaviorSemitransient;

[popover showRelativeToRect:[textfield bounds] 
                     ofView:textfield 
              preferredEdge:NSMaxYEdge];
if ([yourWindowOutlet isMainWindow]) {
    // show popover
}
其中textfield是一个NSTextfield,popover将显示在该字段下。 这一切都是可行的,但问题是,即使窗口隐藏且不处于活动状态,弹出窗口也会显示,就像它不知从何而来(弹出窗口显示时,主窗口仍保持隐藏状态)。
如何解决这个问题有什么帮助吗?

您需要检查您的窗口是主窗口还是关键窗口,然后显示弹出窗口。就这样,

popover = [NSPopover new];    
popover.contentViewController = popoverController;
popover.animates = YES;
popover.delegate = popoverController;
popover.behavior = NSPopoverBehaviorSemitransient;

[popover showRelativeToRect:[textfield bounds] 
                     ofView:textfield 
              preferredEdge:NSMaxYEdge];
if ([yourWindowOutlet isMainWindow]) {
    // show popover
}


在显示popover之前,您是否尝试检查相关窗口是否处于活动状态?我们可以看到您如何创建popover,但看不到显示popover的条件。这些条件可能与解决问题更相关。