今天小部件中心关闭时调用什么操作?

What action is invoked when today widget center is being closed?

我需要找到响应通知中心 closed/hidden 的方法。原因是我在那个小部件中有一个弹出窗口NSMenu,如果你打开它然后关闭整个通知中心,弹出菜单仍然在屏幕上。

我已经尝试实施 NSWindowDelegate 但没有这样的事件定义今天小部件中心的关闭。我找到的最接近的东西是 -windowDidMiniaturize:-windowWillClose:。但是当侧边栏关闭时,它们不会被调用。

终于在NSWindowDelegate协议中找到了需要的方法。

第一步是将自己(在这种情况下是 viewController)添加为所需方法的观察者:windowDidResignKey:

-(void)viewWillAppear {
  //set this view controller delegate for selector windowDidResignKey
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:self.view.window];
}

其次是实现这个方法:

- (void)windowDidResignKey:(NSNotification *)notification {
  //If window did resign key (close today center) - close menus
  if(_sourceLanguageMenu)
    [ _sourceLanguageMenu cancelTracking];
  if(_targetLanguageMenu)
    [ _targetLanguageMenu cancelTracking];
}