Как динамически разместить NSView по отношению к NSStatusBar?

Я создал NSStatusBar NSMenu, как это:

- (NSMenu *)startUpViewBarMenu {
    NSMenu *menu = [[NSMenu alloc] init];

    NSMenuItem* info = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
    //[info setTarget:self];
    [info setView:[self startUpView]];
    [menu addItem:info];

    // Disable auto enable
    [menu setAutoenablesItems:NO];
    [menu setDelegate:(id)self];
    return menu;
}

Я хотел бы динамически перемещать NSView ([self startUpView]) указывает на то, где находится значок. Подобно тому, как Evernote сделал это. Как вы можете видеть, он занимает центральное место в иконке:

Принимая во внимание, что с моим NSStatusBar NSView падает или слева или справа от значка NSStatusBar.

Итак, два вопроса:

Как я могу переместить выпадающий NSView?

Я попытался изменить кадр (-100), но это не имеет значения:

NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(-100, 0, 400, 471)];

Как я могу динамически переместить выпадающий NSView относительно иконки?

1 ответ

Решение

Evernote не использует меню. Похоже, это NSPopover, который срабатывает при нажатии на представление вашего статуса элемента.

/* setup your status item */

self.statusItem.highlightMode = YES;
[self.statusItem setAction:@selector(showPopover:)];
[self.statusItem setTarget:put correct target here];


/* use this code to show popover */


 -(void)showPopover:(id)sender
 {
     NSWindow * aWindow = [sender window];
     NSView * aView = [aWindow contentView];
     NSPopover  * aPopover = [[NSPopover alloc] init];
     /* Setup your popover here */
     [aPopover showRelativeToRect:aView.bounds ofView:aView preferredEdge:NSMaxYEdge];
 }
Другие вопросы по тегам