Get Notification of NSStatusItem frame change?

前端 未结 1 2028
攒了一身酷
攒了一身酷 2020-12-16 06:11

In an app that uses a NSStatusItem with a custom view like this:

\"enter<

相关标签:
1条回答
  • 2020-12-16 06:56

    There is a method -[NSStatusItem setView:]. When you set a custom view for your status item, this view is automatically inserted into a special status bar window. And you can access that window using a method -[NSView window] to observe its 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}}
    }
    

    You will receive the notification every time the status bar becomes visible or hidden and when your icon is moved. This is your chance to update a location of your popup panel.

    0 讨论(0)
提交回复
热议问题