2011-02-11 29 views
4

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

任何人都可以解释发生了什么?我该如何改变这一点?

编辑:数据结构是默认的一个IB设置:我已经改变都和与firstItem子菜单的标题属性,是我想要的标题

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

。然而默认的一个仍然显示。

+0

它们是独立的`NSMenuItem`实例还是它们是`NSMenu`实例? `NSMenu`保持自己的头衔。 – 2011-02-11 05:12:36

+0

屏幕顶部菜单栏中显示的应用程序的主菜单是NSMenu;但是其每个可见条目 - 例如“应用程序名称”,“文件”,“编辑”,“查看”等 - 是NSMenuItem。每个菜单项都包含一个NSMenu,它是您看到的子菜单。所以这是一个NSMenu,但它是一个“特殊的”,它在菜单栏中水平显示,而不是垂直显示。现在,我希望你可以在显示的模拟菜单栏中双击项目,当你将NIB加载到Interface Builder中并直接在那里设置文本。这不适合你吗? – 2011-02-11 10:52:08

+0

安德鲁 - 我可以改变文字,但它仍然在应用程序中显示相同。 – 2011-02-12 17:24:52

回答

0

重命名项目做到了。但似乎太极端了。我仍然会对不太极端的解决方案感兴趣。

6

从$ {PRODUCT_NAME};您的应用程序Info.plist中重命名项目更改“捆绑软件名称”,而不是重命名项目更改“软件包名称”;无论你想要什么;此更改将反映在主菜单的应用程序菜单项的标题中。

4

有时候,这只是不起作用,因为可可不喜欢你的标题:-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上测试。

另一件事:

你要做这一切之后,你有表现的窗口。否则它不起作用。此外,如果您在应用程序启动时执行此过程,并且稍后在显示窗口时再次执行此操作,则可能无法工作。

相关问题