【问题标题】:Cocoa HUD panel shows again after calling orderOut:调用 orderOut 后 Cocoa HUD 面板再次显示:
【发布时间】:2018-02-28 05:57:12
【问题描述】:

我正在使用带有 HUD 样式的 NSPanel 来显示一些信息。

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

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

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

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

我检查了所有可能的orderFront: 代码,但没有一个被调用。所以我的手真的被束缚了。这是系统级别的行为吗?谁能指导我完成这个?

编辑:

我忘了提到,按钮位于 NSPopover 中。因此,基本上,HUD 面板中有一个 NSButton。当用户点击按钮时,会出现一个 NSPopover,在其中,有一个按钮可以打开新窗口。

非常感谢!

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的快速回复!但这并不能解决我的问题。我的问题有点难,我忘了在问题中提到按钮位于 NSPopover 中。因此,当我单击一个按钮时,会出现一个 NSPopover,在弹出框内,有一个按钮可以打开窗口。还有其他想法吗?
    【解决方案2】:

    使用

    [hudPanel performClose:nil]
    

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

    【讨论】:

      【解决方案3】:

      请在[hudPanel orderOut:nil]之后添加[hudPanel close]

      斯威夫特:hudPanel.close()

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

      我认为,有时窗口会在窗口控制器内部逻辑期间重新出现。当长按键盘按钮杀死窗口时,我遇到了一个问题,但拍摄 keyDown 事件只会在瞬间隐藏它。使用close 后一切顺利。

      【讨论】:

        猜你喜欢
        • 2010-11-25
        • 2011-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多