调用orderOut后,Cocoa HUD面板再次显示:

时间:2014-04-10 10:13:13

标签: objective-c macos cocoa

我使用带有HUD风格的NSPanel来显示一些信息。

HUD面板内有一个按钮,当用户点击按钮时,我将通过调用打开一个新窗口:

[anotherWindowController showWindow:self];
[anotherWindowController.window makeKeyAndOrderFront];

我希望面板在窗口显示时消失,所以我设置主窗口的委托,并在windowDidResignMain回调中调用[hudPanel orderOut:nil]

HUD面板确实消失了(我可以看到它),但在它关闭后,它会重新打开。

我已经检查了所有可能的orderFront:代码,但没有一个被调用。所以我的手真的很紧。这是系统级行为吗?任何人都可以指导我完成这个吗?

编辑:

我忘了提到,按钮位于NSPopover中。所以,基本上,HUD面板中有一个NSButton。当用户点击该按钮时,将显示一个NSPopover,其中有按钮以显示新窗口。

非常感谢!

3 个答案:

答案 0 :(得分:0)

我遇到了问题。以下解决了这个问题:

[NSApp endSheet:yourPanel];
[yourPanel orderOut:self];

答案 1 :(得分:0)

使用

[hudPanel performClose:nil]

(在Swift中我必须使用self而不是nil)。使用带有弹出窗口的orderOut时遇到问题,使用上述方法解决了这个问题。

答案 2 :(得分:0)

请在[hudPanel close]

之后添加[hudPanel orderOut:nil]

swift:hudPanel.close()

来自apple docs: 如果窗口是键或主窗口,则紧跟在其后面的窗口对象将成为键或主键。调用orderOut(_ :)会导致窗口从屏幕上移除,但不会导致窗口被释放。有关窗口何时释放的信息,请参阅close()方法。

我认为有时窗口控制器内部逻辑会再次出现窗口。我有一个问题,长按键盘按钮杀死窗口,但镜头keyDown事件只隐藏它在瞬间。使用close之后一切顺利。