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

时间:2015-09-17 11:27:25

标签: objective-c macos cocoa today-extension osx-today-widget

我需要找到响应通知中心关闭/隐藏的方法。原因是我在该窗口小部件中弹出NSMenu,如果您打开它然后关闭整个通知中心,则弹出菜单会保留在屏幕上。

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

1 个答案:

答案 0 :(得分:1)

最后,我在NSWindowDelegate协议中找到了所需的方法。

第一步是添加self(在这种情况下它是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];
}