2012-08-26 29 views
0

当用户点击状态栏中的NSStatusitem时,有没有办法让NSPopover显示?来自NSStatusitem的NSTextField

在我的头到目前为止,我有这样的:

IBOutlet NSStatusItem *statusitem; 

这:

@property (assign) IBOutlet NSPopover *pop; 

下的方法,我有这个:

[[NSImage imageNamed:@"mic.png"]setSize:NSMakeSize(20,20)]; 
statusitem = [[NSStatusBar systemStatusBar]statusItemWithLength:NSVariableStatusItemLength]; 
[statusitem setHighlightMode:YES]; 
[statusitem setImage:[NSImage imageNamed:@"mic.png"]]; 
[statusitem setMenu:menu]; 
[statusitem setAction:@selector(pop:)] 

- (void)pop:(id)sender{ 
[[self pop]showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxXEdge]; 
} 

有没有办法让这个工作?

回答

1

这非常接近正确。您的statusItem属性应该保留,而不是IBOutlet,因为您正在使用代码创建它。此外,你不能同时拥有状态项目的菜单和动作 - 如果你有一个菜单,当你点击状态项目时,它将被打开,而不是触发你的动作方法。所以,如果你做了这些改变,并且你在IB中有popover设置,这应该可以工作。

+0

谢谢我得到它的工作,唯一的问题是它不会消失,当我点击或再次statusitem有无论如何解决这个问题? – haseo98

+0

是的,在IB中,popover的Behavior属性设置为transient。 – rdelmar

+0

谢谢,我注意到的另一个错误是我无法让NSTextfield专注于 – haseo98