如何抓住一个窗口开始退化的那一刻?

时间:2012-06-21 23:25:14

标签: cocoa nswindow nswindowcontroller

NSWindowDelegate协议有一个windowDidDeminiaturize回调,但没有windowWillDeminiaturize回调。我需要抓住窗口开始进行半空间化并在用户看到应用更改之前对其进行更改的时刻。

我无法在windowDidMiniaturize中进行更改,因为我需要显示另一个窗口;如果我在windowDidMiniaturize中执行此操作,则在第一个窗口小型化后,此另一个窗口将立即显示。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

编辑:我在这里留下这个答案,但它完全无法可靠地工作,请参阅下面的评论。

您可以继承NSWindow并覆盖deminiaturize:

@interface MyWindow : NSWindow
@end

@implementation MyWindow

- (void) deminiaturize:(id)sender
{
    NSLog( @"window about to deminiaturize!" );
    [super deminiaturize:sender];
}
@end

可能你希望窗口委托在发生这种情况时采取一些行动,而不是窗口,所以你可以做这样的事情:

- (void) deminiaturize:(id)sender
{
    id<NSWindowDelegate> delegate = [self delegate];
    if( [delegate respondsToSelector:@selector(windowWillDeminiaturize)] ) {
        [delegate performSelector:@selector(windowWillDeminiaturize)];
    }

    [super deminiaturize:sender];
}