Как настроить контекстное меню NSToolbar?

Мне нужно удалить некоторые элементы из контекстного меню, вызываемого правой кнопкой мыши, но панель инструментов не содержит общедоступного API для доступа к 'toolbarView'.

Можно ли настроить меню без использования приватного API?


person Elden    schedule 07.12.2011    source источник


Ответы (1)


Вы можете получить доступ и изменить контекстное меню панели инструментов, когда панель инструментов создана, т.е. в -[awakeFromNib]:

- (NSMenu *)toolbarMenuInWindow:(NSWindow *)window
{
    NSView *contentView = window.contentView;
    NSView *toolbarView = contentView.superview.subviews.lastObject;
    NSMenu *toolbarMenu = toolbarView.menu;
    return toolbarMenu;
}

Теперь вы можете напрямую редактировать пункты меню, а также скрывать или отключать их.

person Vadim    schedule 06.05.2012
comment
В моем текущем решении я попытался создать подкласс NSWindow и переопределить методы mouseDown: и rightMouseDown:. Работает «надежно». - person Elden; 10.05.2012
comment
Добавление примечания о том, что этот метод не работает в более поздних версиях ОС, где toolbarView.menu будет равен нулю. Вместо этого получите меню из contentView.superview, т. е. contentView.superview.menu. Ссылка с форумов разработчиков Apple: developer.apple.com/forums/thread/21887 - person Corbell; 25.10.2020