我使用带有HUD风格的NSPanel来显示一些信息。
HUD面板内有一个按钮,当用户点击按钮时,我将通过调用打开一个新窗口:
[anotherWindowController showWindow:self];
[anotherWindowController.window makeKeyAndOrderFront];
我希望面板在窗口显示时消失,所以我设置主窗口的委托,并在windowDidResignMain
回调中调用[hudPanel orderOut:nil]
。
HUD面板确实消失了(我可以看到它),但在它关闭后,它会重新打开。
我已经检查了所有可能的orderFront:
代码,但没有一个被调用。所以我的手真的很紧。这是系统级行为吗?任何人都可以指导我完成这个吗?
编辑:
我忘了提到,按钮位于NSPopover中。所以,基本上,HUD面板中有一个NSButton。当用户点击该按钮时,将显示一个NSPopover,其中有按钮以显示新窗口。
非常感谢!
答案 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
之后一切顺利。