【问题标题】:How to detect when a NSPanel closes as a result of losing focus? E.g. A user clicking outside of the NSPanel (Window?)如何检测 NSPanel 何时因失去焦点而关闭?例如。用户在 NSPanel(窗口?)之外单击
【发布时间】:2014-08-28 19:48:49
【问题描述】:

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

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

我进行了设置,以便当用户单击 NSPanel 左上角的红色 X 时也会调用我的选择器:

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

这非常有效。我的问题呢?如果用户在 NSPanel 之外单击,则窗口也会关闭。例如。如果他们用鼠标点击弹出的 NSPanel 下方的浏览器窗口。这也会关闭窗口。

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

谢谢!

【问题讨论】:

    标签: objective-c cocoa nswindow nswindowcontroller nspanel


    【解决方案1】:

    让我的 NSWindowController 成为 NSWindowDelegate 的委托。

    myWindowController.h

    @interface myWindowController : NSWindowController <NSWindowDelegate>
    

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

    现在我可以实现了:

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

    一切顺利!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2012-01-11
      相关资源
      最近更新 更多