NSWindowController 上的 viewWillAppear 或 viewDidAppear

2024-03-31

我正在使用 Xcode5.1 在 MacOS X 上开发一个应用程序

每当用户打开或显示 NSWindowController 时我想触发一个操作 我发现的是

  • 窗口加载完成
  • 窗口将加载
  • 从笔尖唤醒

但与 iOS 不同的是:我的方法......

  • 视图将出现
  • 查看是否出现

因为即使我关闭 NSWindowController

[NSWindowController 关闭];

如果我再次打开它,它不会触发我的 windowDidLoad、windowDidAppear 或 awakeFromNib 操作

现在我需要像它们一样的东西,相当于什么,它一定是某种东西

预先感谢您的支持


是的,NSWindowController 中没有这么方便的方法。让我解释一下原因。
iOS 视图控制器和 OS X 窗口控制器之间存在差异:在 iOS 中,视图控制器可以全屏显示或完全从屏幕隐藏。就这样。 OS X 中的窗口具有更多的自由度:它可以显示、隐藏、调整大小、最小化/恢复、被其他应用程序的窗口覆盖、全屏显示、转到另一个屏幕(在多显示器配置中)等。用于跟踪所有这个activity,NSWindow有一个委托(它会自动映射到xib中相应的NSWindowController上)。看一眼NSWindowDelegate https://developer.apple.com/library/mac/documentation/cocoa/reference/NSWindowDelegate_Protocol/Reference/Reference.html文档。因此,iOS“出现”和 OS X 的一系列操作之间没有直接的行为映射。但我们可以尝试使用最近的可能事件。

对于您的情况(在窗口可见时执行某些操作),我可以提供两种不同的方法。
首先,覆盖showWindowNSWindowController 子类中的操作:

- (IBAction)showWindow:(id)sender
{
    [super showWindow:sender];

    // your code here
}

这样,每次在屏幕上创建/显示窗口时都会调用您的代码。

或者第二,使用委托方法:

- (void)windowDidChangeOcclusionState:(NSNotification *)notification
{
    // notification.object is the window that changed its state.
    // It's safe to use self.window instead if you don't assign one delegate to many windows
    NSWindow *window = notification.object;

    // check occlusion binary flag
    if (window.occlusionState & NSWindowOcclusionStateVisible)  
    {
        // your code here
    }
}

这样,每次窗口(或其一部分)变得可见时,您的代码都会被调用。例如,如果用户最小化您窗口上方的另一个窗口(或将其移动到某处),则可能会发生此事件。当你想在隐形窗口中暂停动画/计时器/等以节省一些CPU时,这是通常的情况:)
如果您需要在窗口上执行某些操作,这也是非常有用的方法消失(例如,启用了hidesOnDeactivateflag没有关闭,没有调用对应的委托方法;他们只是从屏幕上删除不关闭)。此方法使我们能够跟踪这些情况:

- (void)windowDidChangeOcclusionState:(NSNotification *)notification
{
    if (self.window.occlusionState & NSWindowOcclusionStateVisible)
    {
        // Appear code here
    }
    else
    {
        // Disappear code here
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSWindowController 上的 viewWillAppear 或 viewDidAppear 的相关文章

随机推荐