Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 设置我的应用程序中项目的标题';什么是主菜单?_Cocoa_Macos_Nsmenu_Nsmenuitem - Fatal编程技术网

Cocoa 设置我的应用程序中项目的标题';什么是主菜单?

Cocoa 设置我的应用程序中项目的标题';什么是主菜单?,cocoa,macos,nsmenu,nsmenuitem,Cocoa,Macos,Nsmenu,Nsmenuitem,我正在尝试更改可可应用程序主菜单中某些项目的标题。我尝试过在IB中设置它们,也尝试过在我的应用程序的ApplicationIDFinishLaunchingWithOptions:method中以编程方式设置它们。无论哪种方式,我的NSMenuItem对象的title属性都会更改。但是,当应用程序运行时,我的任何更改都不会反映在屏幕顶部项目的实际标题中 有人能解释发生了什么事吗?我怎样才能改变这个 编辑:数据结构是IB设置的默认结构: NSApplication *app = [NSApplic

我正在尝试更改可可应用程序主菜单中某些项目的标题。我尝试过在IB中设置它们,也尝试过在我的应用程序的ApplicationIDFinishLaunchingWithOptions:method中以编程方式设置它们。无论哪种方式,我的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和子菜单的标题属性更改为所需的标题。但是默认的一个仍然显示。

重命名项目完成了它。不过,这似乎太极端了。我仍然对不那么极端的解决方案感兴趣。

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

有时,这根本不起作用,因为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];
是的,这太疯狂了,但是最后那个额外的角色让一切都不同了。(您也可以只添加一个空格,但随后菜单项会增长,这可能不是您想要的。)

在OSX10.9.5上测试

另一件事:


你必须在展示完一扇窗户后再做这些。否则它就不起作用了。此外,如果您在应用程序启动时执行此过程,然后在显示窗口时再次执行此过程,则可能无法正常工作。

它们是独立的
NSMenuItem
实例还是
NSMenu
实例
NSMenu
保留自己的标题。屏幕顶部菜单栏中显示的应用程序主菜单是NSMenu;但它的每个可见条目——如“应用程序名称”、“文件”、“编辑”、“查看”等——都是NSMenuItem。每个菜单项都包含一个NSMenu,它是您在下拉菜单中看到的子菜单。所以它是一个NSMenu,但它是一个“特殊菜单”,在菜单栏中水平显示,而不是垂直显示。现在,当您将NIB加载到Interface Builder中并直接在那里设置文本时,我希望您能够双击显示的模拟菜单栏中的项目。这对你不起作用吗?安德鲁——我可以更改文本,但它在应用程序中仍然显示相同的内容。Codeweavers的某人说他们使用“丑陋的黑客”来完成这项工作,在AppKit看到它之前,他们更改了应用程序包的名称。我没有详细信息。当你说“重命名”时,你的意思是你只是更改了它的文件名并解决了它,还是你用一个新名称“从干净”重新创建了项目?在Xcode中,项目菜单>重命名。这改变了很多事情。我没有调查他们中的哪一个做了这个把戏。好的,谢谢-可能对遇到相同问题的其他人有用。如果你仍然对一个不太极端的解决方案感兴趣,那么你应该接受@askh的答案?我在-(void)applicationdFinishLaunching:(NSNotification*)aNotification中做了这件事,它工作得很好。这确实有效,但是标题不再用粗体了?@basdp:这是个问题吗?或者你有没有问题,标题不再是粗体?无论我在哪里测试过它,标题都是粗体的。是的,我也经历过同样的事情。菜单栏中的第一个菜单标题(ex app name)更改,但不再以粗体显示。我试过设置字体,没有结果。代码为:let items=NSApplication.shared.main menu?.items let firstItem=items?[0]let subMenu=firstItem?.subMenu?.title=“NewApplication”subMenu?.font=NSFont.boldSystemFont(ofSize:0)