xcode - 获取对状态菜单项的引用并更改其标题

标签 xcode cocoa

我有一个带有状态菜单的 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/

相关文章:

ios - 命令因信号 : Segmentation fault: 11 (Only Sometimes) 而失败

iOS UITapGestureRecognizer 有时不工作

objective-c - 让 CVDisplayLink + 自动引用计数完美结合

objective-c - 为什么要在这个语句中释放NSURLConnection实例呢?

xcode - Swift:if 条件改变时括号是什么意思?

ios - 缺少 iOS 应用程序的推送通知授权

ios - 如何为每个目标提供不同的 bundle 显示名称(本地化)?

Swift:如何在不等待进程完成的情况下读取子进程中的标准输出

objective-c - 如果不使用 NSViewController 来兼容 10.4,你会怎么做?

cocoa - 在 Web View 中禁用 VoiceOver