我有一个 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 的方式实现这一目标的最佳方法是什么?