NSMenuDelegate提问

时间:2010-08-03 14:24:25

标签: cocoa macos nsmenuitem

我有一个NSMenu,它包含静态和动态创建的NSMenuItem(静态意味着在Interface Builder中创建的NSMenuItem,动态意味着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兼容的方式实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您已保存:自{10.3}起,-menuNeedsUpdate:已可用。 : - )

  

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

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

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