如何检测NSPanel因失去焦点而关闭的时间?例如。用户点击NSPanel外部(窗口?)

时间:2014-08-28 19:48:50

标签: objective-c cocoa nswindow nswindowcontroller nspanel

我有一个通用的NSPanel窗口,我在我的应用程序中用作首选项窗口。我有一个选择器,每次窗口关闭时我都会调用它。该选择器的目的是保存用户所选首选项的状态(没有“保存”按钮)。

我有一个NSButton(“CLOSE”),我很容易设置它来调用我的结束选择器。

我进行了设置,以便在用户点击NSPanel左上角的RED X时调用我的选择器:

NSButton *closeButton = [[self window] standardWindowButton:NSWindowCloseButton];
[closeButton setTarget:self];
[closeButton setAction:@selector(myCloseSelector:)];

这完美无缺。我的问题虽然?如果用户点击NSPanel的,则 窗口会关闭。例如。如果他们拿起鼠标并点击弹出的NSPanel下面的浏览器窗口。这也关闭了窗口。

如何让我的NSPanel失去焦点并关闭?我需要确保在发生这种情况时我也会调用我的选择器。

谢谢!

1 个答案:

答案 0 :(得分:1)

让我的NSWindowController成为NSWindowDelegate的代表。

<强> myWindowController.h

@interface myWindowController : NSWindowController <NSWindowDelegate>

然后将myWindowController设置为我的NSPanel的委托。

现在我可以实施:

- (void) windowDidResignKey:(NSNotification *)notification {
    NSLog(@"Houston...we lost a panel.");
}

一切都在游泳!