2011-02-11 28 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上測試。

另一件事:

你要做這一切之後,你有表現的窗口。否則它不起作用。此外,如果您在應用程序啓動時執行此過程,並且稍後在顯示窗口時再次執行此操作,則可能無法工作。

相關問題