获取NSStatusItem帧变化的通知?(Get Notification of NSStatus

2019-06-26 08:12发布

在使用一个应用程序NSStatusItem像这样的自定义视图:

...你怎么能操作时收到通知:

  1. 状态栏被隐藏,因为全屏幕应用程序
  2. 状态的项目因为另一个项目被添加/删除/调整移动位置?

两者都是必要的自定义视图移动到合适的位置,当项目发生变化的地方。

Answer 1:

有一种方法-[NSStatusItem setView:] 。 当您设置自定义视图您的状态的项目,这一观点被自动插入到一个特殊的状态栏的窗口。 你可以使用的方法访问窗口-[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}}
}

您将收到通知每一个状态栏变得可见的或隐藏的,当你的图标移动的时间。 这是你的机会来更新您的弹出面板的位置。



文章来源: Get Notification of NSStatusItem frame change?