macos - 获取 NSStatusItem 框架更改的通知?

标签 macos cocoa notifications nsnotificationcenter nsstatusitem

在使用 NSStatusItem 和自定义 View 的应用程序中,如下所示:

enter image description here

...您如何在以下情况下收到通知:

  1. 由于全屏应用,状态栏被隐藏
  2. 由于添加/删除/调整了另一个项目/调整了另一个项目,状态项目移动了位置?

当项目改变位置时,两者都是将自定义 View 移动到正确位置所必需的。

最佳答案

有一个方法-[NSStatusItem setView:]。当您为状态项设置自定义 View 时,该 View 会自动插入到特殊的状态栏窗口中。您可以使用方法 -[NSView window] 访问该窗口来观察其 NSWindowDidMoveNotification:

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
    NSStatusItem *statusItem = [self newStatusItem];
    NSView *statusItemView = [self newStatusItemView];
    statusItem.view = statusItemView;

    NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
    [dnc addObserver:self selector:@selector(statusBarDidMove:)
                name:NSWindowDidMoveNotification object:statusItemView.window];
}

- (void)statusBarDidMove:(NSNotification *)note
{
    NSWindow *window = note.object;
    NSLog(@"%@", NSStringFromRect(window.frame)); // i.e. {{1159, 900}, {24, 22}}
}

每次状态栏变得可见或隐藏以及移动图标时,您都会收到通知。这是您更新弹出面板位置的机会。

关于macos - 获取 NSStatusItem 框架更改的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11504696/

相关文章:

php - mac 使用 Homebrew 软件升级 native php,无法正常工作

macos - 在 Hammerspoon 中,如何在启动时获取当前关注的应用程序名称?

java - 如何在 Mac OSX 上增加 java 的全局堆大小

macos - NSTokenField 的灵活替代方案?

android - 如何在 Android 中读取 Facebook 通知计数

Objective-c:如何旋转 CGRect

cocoa - NSColorWell 子类未获取 mouseMoved 事件

cocoa - 如何让我的 Cocoa 应用程序准确绘制设计师在 Sketch 中指定的颜色?

swift - 我想通过 BLE 设备使用 ANCS 回复 WhatsApp 通知

ios - 发出本地警报通知