如何在NSWindow开通时获得通知?

时间:2013-12-08 13:30:32

标签: cocoa nswindow appkit nswindowcontroller

如果NSWindow即将开启或刚刚开启时,如何注意?也就是说,与windowWillClose:委托方法相反(同样与NSWindowWillCloseNotification.相反)

这与this question有关,但与其他方向有关。

背景是,我正在寻找在主菜单上加上一个带有标记的窗口(以及其他内容)。显示窗口时,应检查相应的̨菜单项,反之亦然。

3 个答案:

答案 0 :(得分:4)

当窗口何时或如何可见时,通常不应该是一个谜。它应该只发生在你自己的代码正在做的事情上。如果窗口在NIB中并且在启动时标记为Visible,则它会显示代码何时加载该NIB。否则,只有当您拨打除-order...之外的-orderOut:方法之一(例如-orderFront:)或-makeKeyAndOrderFront:时,才会显示该方法。如果窗口由窗口控制器控制,那么它将显示您是否调用-[NSWindowController showWindow:]。等

如果您确实需要收到通知,可以继承NSWindow并覆盖-orderWindow:relativeTo:,如果orderingMode不是NSWindowOut且窗口尚未显示,发布自己的通知。

答案 1 :(得分:1)

通过macOS 10.10,通过调用NSViewController viewWillAppearviewDidAppear可以解决这个问题。有一个NSViewController子类并将其设置为窗口的contentViewController。然后,其viewWillAppear / viewDidAppear实施可以发布窗口将(或确实)打开的通知。

答案 2 :(得分:0)

如果您在IB中执行此操作,则可以将NSMenuItem值绑定到NSWindow s visible绑定零行代码。

  

可见:   一个布尔值,指定NSWindow是否可见   如果可见评估为YES,则可以看到NSWindow   可用性:   适用于OS X v10.3及更高版本。

有关详细信息,请参阅NSWindow Binding Documentation

您可以将NSMenuItem值绑定绑定到现有类中的现有NSWindow属性,或者将NSObjectController添加到您的nib并将其内容设置为{{ 1}} instance然后绑定到控制器。

在Mac OS 10.9上经过测试和确认。适用于窗口最小化和恢复。

相关问题