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:

Другие вопросы по тегам