2011-08-24 30 views
4

我有一個帶有菜單欄圖標和狀態菜單的非文檔Cocoa應用程序,我在Interface Builder的狀態菜單中添加了一個「Open Recent」菜單。菜單工作得很好:以編程方式將「Open Recent」菜單添加到上下文彈出式菜單中

[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL: 
      [NSURL fileURLWithPath:filename]] 

現在我也想添加第二個「打開最近」菜單中的情境彈出式菜單中我將如何編程創建菜單以便它能夠處理條目自動填充。它確實爲狀態菜單中的版本?

我試圖在sta中創建一個副本tus菜單,但它不會被填充。我假設NSDocumentController不知道菜單(坦白地說,我不知道它是如何知道狀態菜單中的那個)。

回答

2

以供參考,在打開最近菜單,我發現的內部運作最好的文檔是這樣的: http://lapcatsoftware.com/blog/2007/07/10/working-without-a-nib-part-5-open-recent-menu/

不幸的是,它沒有太大的幫助與此,因爲即使你創造像這樣的菜單,它將被NSDocumentController忽略。該菜單必須存在於applicationDidFinishLaunching:調用之前的主菜單中,否則將不會被拾取 - 因此,重複的菜單也會被忽略。

我最終什麼事做,什麼似乎工作至今,是這樣的:

的第一個想法是從主菜單中選擇相應的NSMenu並將其附加到其他菜單,以及,希望參考計數將使這項工作。沒有這樣的運氣,setSubmenu如果子菜單已經在另一個NSMenuItem拋出。

所以我「重新設置父級」子菜單,而不是 - 當我需要顯示它在另外的菜單,我從主菜單中的打開最近使用的項目刪除它,並把它作爲新的菜單的子菜單。之後,我將它移回。這當然是一個醜陋的黑客,但它完成了工作。

相關問題