在我的应用主菜单中设置项目标题?

时间:2011-02-11 03:52:28

标签: cocoa macos nsmenu nsmenuitem

我正在尝试更改Cocoa应用主菜单中某些项目的标题。我已尝试在IB中设置它们,也可以从我的应用程序的applicationDidFinishLaunchingWithOptions:方法中进行编程。无论哪种方式,我的NSMenuItem对象的title属性确实发生了变化。但是,当应用程序运行时,我的更改都没有反映在屏幕顶部项目的实际标题中。

有谁可以解释发生了什么?我怎么能改变这个?

编辑:数据结构是IB设置的默认结构:

NSApplication *app = [NSApplication sharedApplication];
NSMenu *mainMenu = [app mainMenu];
NSArray *itemArray = [mainMenu itemArray];
NSMenuItem *firstItem = [itemArray objectAtIndex: 0];
NSMenu *submenu = [firstItem submenu];

我已将firstItem和subMenu的title属性更改为我想要的标题。然而,默认的仍然显示。

3 个答案:

答案 0 :(得分:6)

而不是从$ {PRODUCT_NAME}重新命名您的-application-Info.plist中的项目更改“Bundle name”;无论你想要什么;此更改将反映在主菜单的“应用程序”菜单项的标题中。

答案 1 :(得分:4)

有时,这只是行不通,因为Cocoa不喜欢你的头衔:-p当您选择的标题是本地化的应用程序名称时,它希望显示非本地化的应用程序名称。一个小技巧可以帮助...

NSMenu *menu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
NSString *title = @"My app name";

// Append some invisible character to title :)
title = [title stringByAppendingString:@"\x1b"];

[menu setTitle:title];

是的,它很疯狂,但最后那个额外的角色让一切变得与众不同。 (你也可以只附加一个空格,但随后菜单项会增长,这可能不是你想要的。)

在OS X 10.9.5上测试。

另一件事:

您必须在显示窗口后执行所有操作。否则它就行不通。此外,如果您在应用程序启动时执行此过程,然后在显示窗口时再次执行此操作,则它可能也不起作用。

答案 2 :(得分:0)

重命名该项目。但是看起来太极端了。我仍然会对一个不太极端的解决方案感兴趣。