3
我有一個NSStatusItem
點擊時,有一個下拉菜單:當NSStatusItem被點擊時是否檢測到它是否有菜單?
[statusItem setMenu:statusMenu];
由於我使用的菜單,該代碼將不會檢測時的狀態項被點擊:
[statusItem setAction:@selector(isClicked:)];
如何使用菜單,但同時知道狀態項被點擊?
我有一個NSStatusItem
點擊時,有一個下拉菜單:當NSStatusItem被點擊時是否檢測到它是否有菜單?
[statusItem setMenu:statusMenu];
由於我使用的菜單,該代碼將不會檢測時的狀態項被點擊:
[statusItem setAction:@selector(isClicked:)];
如何使用菜單,但同時知道狀態項被點擊?
要完成此操作,您需要設置菜單的代理。
首先,在接口文件(.h)中設置該類作爲代理NSMenu
。例如:你的初始化狀態項時
@interface MyClass : NSObject <NSMenuDelegate>
. . .
@end
在實現文件(.M)
然後使用這樣的代碼:
//your status item initialization code. Then:
[statusItem setMenu:statusMenu];
[statusMenu setDelegate:self];
如果你願意,給你的菜單中的標題(可完成如果您在Interface Builder中創建了菜單,則在「屬性檢查器」下使用Xcode Interface Builder)。這樣做是爲了消除與其他菜單的差異。
則此方法添加到您的類的實現(.M)文件:
-(void)menuWillOpen:(NSMenu *)menu{
if([[menu title] isEqualToString:@"Menu's title"]){
//RUN CODE WHEN STATUS ITEM IS CLICKED
}
}
這就是它!你甚至可以使用下面的代碼時,菜單關閉檢測:
-(void)menuDidClose:(NSMenu *)menu{
if([[menu title] isEqualToString:@"Menu's title"]){
//RUN CODE WHEN MENU IS CLOSED
}
}
被點擊的狀態項時,可以知道現在,即使您正在使用的菜單。