Получение NSMenuItem дерева NSMenu по заголовку - PullRequest
2 голосов
/ 24 марта 2012

У меня есть NSMenu (скажем, Главное меню), с большим количеством NSMenu с и NSMenuItem с на разных уровнях.

Я хочу иметь возможность получитьЭкземпляр NSMenuItem, указывающий путь к дереву (с названием соответствующего заголовка NSMenus / NSMenuItems).

Пример:

Меню:

  • Файл
    • Новый
    • Открыть
      • Документ
      • Проект
    • Сохранить
    • Сохранить как ...

Путь: / Файл / Открыть / Документ

Как бы вы поступилиэто наиболее эффективным и дружественным к какао способом?

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

Я думаю, что лучшим способом было бы получить 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 голос
/ 24 марта 2012

Итак, вот оно; решается созданием 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"]; 
...