2012-03-24 95 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