【问题标题】:Setting title on NSMenuItem, without effect在 NSMenuItem 上设置标题,没有效果
【发布时间】:2023-03-10 14:10:01
【问题描述】:

我从Main Menu 得到一个NSMenuItem,代码在这里:Getting NSMenuItem of NSMenu tree by title

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

  • 一个NSMenuItem 与一个动作连接:当使用发送者 属性 (NSMenuItem) 并设置标题,它可以工作
  • BUT : 用上面的函数获取item并设置title时, 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

【问题讨论】:

    标签: objective-c cocoa nsmenuitem nsmenu


    【解决方案1】:

    我会忘记 通过标题获取 NSMenu 树的 NSMenuItem 代码并连接 IB 中的每个菜单。

    然后在需要的时候使用setTitle就可以了

    更新*

    (见 cmets) 我花了一段时间才弄清楚为什么连我的测试都不起作用!!我在 IB 中添加了一个属性标题。

    所以当我后来使用 setTitle 时。正在设置属性,但实际显示的菜单已被属性标题覆盖。

    从 IB 中删除属性标题。解决了这个问题。 setTitle 按预期工作。

    而且我以前从未使用过属性标题。我刚刚在 IB 属性标题中粘贴了一些格式化的彩色文本。而且菜单项的颜色和字体都是一样的。

    这是我一直想做却觉得不可能的事。

    以编程方式进行操作很容易。

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

    【讨论】:

    • 这行得通(我想);但是,以上呢?我做错了什么?
    • tag:PP_MENU_TAG_STATUSBAR] 部分是什么?您的方法名称中没有那个!
    • 好吧,好吧...我承认 - 对于一个特定的子情况,我必须为其中一个菜单项声明一个标签...所以我创建了一个适当的函数 (getItemWithPath:tag: - 与另一个几乎相同)+ 定义PP_MENU_TAG_STATUSBAR(=1))。噗……真的太复杂了……我开始觉得我应该按照你的方式去做……
    • 嗯,网点也不行...太好了...我可能不得不处理validateMenuItem:等,虽然我不确定如何...
    • 我花了一段时间才弄清楚为什么连我的测试都不起作用!!。查看更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2023-04-03
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多