2014-08-28 78 views
0

我有一个通用的NSPanel窗口,我在我的应用程序中用作偏好窗口。每当窗口关闭时,我都会选择一个选择器。该选择器的目的是保存用户选择的首选项的状态(没有“保存”按钮)。如何检测NSPanel由于失去焦点而关闭?例如。用户点击NSPanel外部(窗口?)

我有一个NSButton(“关闭”),我很容易设置调用我的关闭选择器。

我设定,让我的选择也被称为当用户通过点击做红色的X在NSPanel的左上角:

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

这完美的作品。我的问题,但?如果用户单击NSPanel的以外的,则关闭窗口。例如。如果他们拿起鼠标并点击浏览器窗口弹出的NSPanel下方。这也关闭了窗口。

如何捕获我的NSPanel失去焦点并关闭?我需要确保当发生这种情况时,我也会得到我的选择器。

谢谢!

回答

1

使NSWindowController成为NSWindowDelegate的代表。

myWindowController.h

@interface myWindowController : NSWindowController <NSWindowDelegate> 

,然后设置myWindowController作为委托我NSPanel。

现在我可以实现:

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

,一切工作顺顺当当!