单击时我有NSStatusItem
一个下拉菜单:
[statusItem setMenu:statusMenu];
由于我使用的是菜单,因此此代码不会检测到单击状态项的时间:
[statusItem setAction:@selector(isClicked:)];
如何使用菜单但同时知道状态项被单击?
单击时我有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 中的“Attribute Inspector”下完成)。这样做可以消除与其他菜单的差异。
然后将此方法添加到您的类的实现 (.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
}
}
您现在可以知道单击状态项的时间,即使您使用的是菜单。