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

我有一个NSButton(“ CLOSE”),可以轻松设置为调用关闭选择器。

我进行了设置,以便当用户通过以下操作单击NSPanel左上角的RED X时也调用我的选择器:

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


这很完美。我的问题呢?如果用户在NSPanel之外单击,该窗口也会关闭。例如。如果他们拿着鼠标并单击弹出的NSPanel下方的浏览器窗口。这也会关闭窗口。

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

谢谢!

最佳答案

使我的NSWindowController成为NSWindowDelegate的委托。

myWindowController.h

@interface myWindowController : NSWindowController <NSWindowDelegate>


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

现在我可以实现:

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


一切都畅通无阻!

10-08 05:25