2014-09-25 4 views
1

Метод itemWithTitle находит пункт меню в пределах NSMenu. Однако он выглядит только на первом уровне. Я не могу найти готовый к использованию метод, который будет выполнять ту же работу рекурсивно, выполнив поиск во всех вложенных подменю. Или, как-то эквивалентно, функция, которая перескакивает NSmenu рекурсивно.Поиск NSMenuItem внутри NSMenu рекурсивно

Мне кажется невероятным, что такой вещи не существует. Может быть, есть некоторая функция, не связанная напрямую с NSMenu, которая может пригодиться?

+0

Это не трудно закодировать это самостоятельно. Но более важно: зачем вам это нужно? Я подозреваю, что то, что вы пытаетесь выполнить, может быть лучше выполнено каким-то другим способом, например, с помощью проверки меню. (Который, кстати, является ** почему ** то, что вы найдете невероятным, может и не быть. В этой функции очень мало необходимости.) –

+0

@KenThomases Я знаю, что это не сложно сделать самому, но прежде, чем я изобретаю колесо Я хочу быть на 100% уверен, что он еще не существует. Программисты должны быть ленивыми ... –

+0

Если вы прочтете остальную часть моего комментария, вы увидите, что я на самом деле не рекомендую вам самому его кодировать. Я говорил, что желание иметь эту функциональность указывает на то, что вы делаете вещи (или пытаетесь сделать что-то) неправильно. Вы сражаетесь с рамками. –

ответ

0

Хорошо, потому что мне действительно нужно сделать это неуклюжее обходное решение по ряду конкретных причин (вне сферы действия этого сообщения, и в любом случае это неинтересно). Я закончил его самостоятельно.

Вот фрагмент кода:

NSMenuItem * mitem; 

while (mitem) { // loop over all menu items contained in any submenu, subsubmenu, etc. 

    // do something with mitem .... 

    mitem = next_menu_item(mitem); 
} 

который питается от функций:

NSMenuItem * goto_submenu(NSMenuItem * mitem){ 

    NSMenu * submen = [mitem submenu]; 
    if (submen && [[submen title] isNotEqualTo:@""] && [submen numberOfItems]) 
     return goto_submenu([submen itemAtIndex:0]); 

    return mitem; 
}; 

NSMenuItem * next_menu_item(NSMenuItem * mitem){ 

    NSMenu * menu = [mitem menu]; 

    if ([menu indexOfItem:mitem]==([menu numberOfItems]-1)) //if is last item in submenu go to parent item 
     return [mitem parentItem]; 

    return goto_submenu([menu itemAtIndex:([menu indexOfItem:mitem]+1)]); 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^