NSMenuDelegate вопросы
У меня есть NSMenu, который содержит как статические, так и динамически созданные NSMenuItem (статические, означающие NSMenuItem, созданные в Интерфейсном Разработчике, динамические, означающие NSMenuItem, созданные во время выполнения). Хотя я работаю на 10.6, мое приложение также предлагает поддержку 10.5.
Мое меню состоит из ряда динамических NSMenuItem, которые содержат подменю. В настоящее время я использую метод parentItem: метод NSMenuItem (исключая 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 ответ
Вы сохранены: -menuNeedsUpdate: доступен с 10.3.:-)
Доступный в Mac OS X v10.3 и позже. Доступен как часть неофициального протокола до Mac OS X 10.6.
Я интенсивно использую его в приложении, нацеленном на 10,5/10,6.
Примечание. Этот ответ относится к более ранней версии вопроса о наличии -menuNeedsUpdate: