我有一个NSMenu
(让我们说主菜单),里面有很多NSMenu
个,NSMenuItem
位于不同的级别。
我希望能够获取指定树路径的NSMenuItem实例(其中包含相应NSMenus / NSMenuItems的标题)。
示例:
菜单:
- 文件
- 新
- 打开
- 文档
- 项目
- 保存
- 另存为...
路径: /文件/打开/文档
你会如何以最有效和可可友好的方式解决这个问题?
答案 0 :(得分:3)
我认为最好的方法是通过指定标题或更好的自定义标记来获取NSMenuItem
。
#define kMenuFileNew 1
#define kMenuFileOpen 2
NSMenu *menu = [[NSMenu alloc] initWithTitle:@"File"];
NSMenuItem *item1 = [[NSMenuItem alloc] initWith..];
item1.tag = kMenuFileOpen;
[menu addItem:item1];
NSMenuItem* item2 = [menu itemWithTag:kMenuFileOpen];
答案 1 :(得分:1)
所以,这是;通过在Category
上创建NSMenu
并使用递归来解决。
代码:
- (NSMenuItem*)getItemWithPath:(NSString *)path
{
NSArray* parts = [path componentsSeparatedByString:@"/"];
NSMenuItem* currentItem = [self itemWithTitle:[parts objectAtIndex:0]];
if ([parts count]==1)
{
return currentItem;
}
else
{
NSString* newPath = @"";
for (int i=1; i<[parts count]; i++)
{
newPath = [newPath stringByAppendingString:[parts objectAtIndex:i]];
}
return [[currentItem submenu] getItemWithPath:newPath];
}
}
用法:
NSMenuItem* i = [mainMenu getItemWithPath:@"View/Layout"];