如何相对于 NSStatusBar 动态放置 NSView?
How to dynamically place NSView in relation to 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?
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];
}
我创建了一个 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?
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];
}