【问题标题】:NSMenuDelegate questionsNSMenuDelegate 问题
【发布时间】:2010-08-03 14:24:24
【问题描述】:

我有一个 NSMenu,它包含静态和动态创建的 NSMenuItem(静态意味着 NSMenuItem 在 Interface Builder 中创建,动态意味着 NSMenuItem 在运行时创建)。虽然我在 10.6 上进行开发,但我的应用程序也提供 10.5 支持。

我的菜单由许多包含子菜单的动态 NSMenuItem 组成。目前,我正在使用 NSMenuItem 的 parentItem: 方法(10.6 独有)在单击子菜单项时抓取父菜单项。

编辑:这是创建手动 parentItem: 方法的粗略尝试,但不是特别直观。肯定有更好的方法吗?

- (NSMenuItem *)findParentByChild:(NSMenuItem *)child {
    for(int x = 0; x < [statusBarMenu numberOfItems]; x++) {
        // Avoid any statically created menu items
        if([[statusBarMenu itemAtIndex:x] tag] != 100) {
            NSMenu *submenu = [[statusBarMenu itemAtIndex:x] submenu];
            if(submenu != nil) {
                for(int y = 0; y < [submenu numberOfItems]; y++) {
                    // This looks like our parent
                    if([submenu itemAtIndex:y] == child) {
                        return [statusBarMenu itemAtIndex:x];
                    }
                }
            }
        }
    }
    return nil;
}

以兼容 10.5 和 10.6 的方式实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: cocoa macos nsmenuitem


    【解决方案1】:

    您已获救:-menuNeedsUpdate: 从 10.3 开始可用。 :-)

    适用于 Mac OS X v10.3 及更高版本。 作为非正式的一部分提供 Mac OS X v10.6 之前的协议。

    我在针对 10.5/10.6 的应用程序中大量使用它。

    注意:此答案与有关 -menuNeedsUpdate 可用性的问题的早期版本有关:

    【讨论】:

    • 天啊!这教会了我阅读不够仔细。我已经相应地更新了我的问题。谢谢!
    • 嗯......你的问题对我来说不再清楚。我建议修改您的问题以包含您的实际总体目标。目前它读起来像“如何为一个未命名的问题实施这个解决方案?” :-) 通过获取菜单项的父项,从您要完成的工作开始。对我来说,这似乎是一个菜单项到模型对象的问题,你可以通过明智地使用 NSMenuItem 的 -representedObject 来解决,但我根据你的问题在这里疯狂猜测。
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 2013-06-04
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多