2012-03-24 91 views
0

我從Main Menu得到一個NSMenuItem,這裏的代碼:Getting NSMenuItem of NSMenu tree by title設置標題,不影響

然而,奇怪的事情發生了:

  • 與動作連接的NSMenuItem:當使用發件人 屬性(NSMenuItem)並設置標題,它的工作原理
  • 但是:當得到與上述功能的項目,並設置標題, 的NSMenuItem的標題確實發生了改變,但變化不是 反映在其所屬的菜單。

我在做什麼錯? (我敢肯定,這是一個非常愚蠢的......)

NSMenuItem* mi = [[core mainMenu] getItemWithPath:@"View" tag:PP_MENU_TAG_STATUSBAR]; 
[mi setTitle:@"newTitle"]; 
NSLog(@"mi : %@",[mi title]); 

// mi changes, but no changes take effect in the mainMenu 

回答

1

我會忘記 按標題代碼獲取NSMenu樹NSMenuItem,只是連接每個菜單中的IB。

需要

時,然後使用的setTitle它UPDATE *

(見註釋) 我花了一段時間才弄清楚,爲什麼連我的測試一個沒有工作!。我已經在IB中提供了一個歸屬標題。

enter image description here

所以,當我後來用的setTitle。該屬性正在設置,但實際顯示的菜單被歸屬標題覆蓋。

刪除IB的歸屬標題。解決這個問題和setTitle按預期工作。

此外,我從來沒有使用過屬性標題。我只是在IB分類標題中粘貼了一些格式化的彩色文本。菜單項的顏色和字體相同。

我一直希望能夠做到,但認爲是不可能的。

以編程方式進行操作非常簡單。

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"newTestMenu"]; 
    [string addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0,string.length)]; 

    [_testMenu setAttributedTitle:string]; 
+0

This works(I suppose);但是,上面呢?我究竟做錯了什麼? – 2012-03-24 14:31:05

+0

什麼是標籤:PP_MENU_TAG_STATUSBAR]部分?你在方法名中沒有這個名字! – markhunte 2012-03-24 14:38:26

+0

好吧,我承認它 - 對於一個特定的子子句,我必須爲其中一個菜單項聲明一個標籤...所以我創建了一個適當的函數('getItemWithPath:tag:' - 幾乎是與另一個相同)+定義「PP_MENU_TAG_STATUSBAR」(= 1))。 Pffff ...它真的太複雜了...我開始認爲我應該按照你的方式去做... – 2012-03-24 14:42:43