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

问题描述 投票:5回答:3

我正在尝试更改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属性更改为我想要的标题。然而,默认的仍然显示。

cocoa macos nsmenu nsmenuitem
3个回答
6
投票

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


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上测试过。

另一件事:

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.