我有一个带有状态菜单的 Mac OS 应用程序(在 Interface Builder 中制作)。我想在特定事件发生时更改状态菜单项标题。我可以在操作处理程序中很好地完成此操作,因为我在那里引用了该项目(sender
):
- (IBAction)playPauseMusic:(id)sender {
// ...
[sender setTitle:@"New Title"];
}
但是如何在我的应用程序的其他部分执行此操作?我不知道如何在以下代码中获取对 menuItem
的引用:
- (void) someOtherMethod:(int)isPlaying {
menuItem = ...;
if(isPlaying) {
[menuItem setTitle:@"Pause"];
}
}
要做什么才能使上述工作正常进行?
更新。以下是我附加状态菜单的方法:
// MyAppDelegate.h:
@interface MyApp : NSApplication
@end
@interface MyAppDelegate : NSObject <NSApplicationDelegate>
{
NSMenu *statusMenu;
NSStatusItem *statusItem;
// ...
}
@property (strong) IBOutlet NSMenu *statusMenu;
// ...
@end
// MyAppDelegate.m:
@synthesize statusMenu;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
statusItem = [[NSStatusBar systemStatusBar]
statusItemWithLength:NSVariableStatusItemLength];
[statusItem setMenu:[self statusMenu]];
}
最佳答案
如果您想访问菜单中的某个项目,请在菜单项上设置一个标签(例如在 IB 中)并使用:
NSMenuItem *menuItem = [[statusItem menu] itemWithTag:100]; // 100 = example
menuItem.title = @"Something";
如果想要设置标题的代码与保存 statusItem
的对象不同,那么您需要公开一个 setStatusMenuTitle:forItemWithTag:
方法来执行以上代码。
但是,如果没有更多详细信息,我无法告诉您如何访问该对象。
关于xcode - 获取对状态菜单项的引用并更改其标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18717984/