Как динамически разместить 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];
}