Отображение контекстного меню
Набор Приложения интерпретирует события «правильная мышь вниз», и события «снизили мышь», измененную Клавишей CTRL как команды для отображения контекстного меню для представления, по которому щелкают. Ваши подклассы представления имеют несколько альтернативных подходов для отображения контекстного меню:
Сконфигурируйте в Интерфейсном Разработчике: Добавьте автономное (беспочвенное) меню к файлу пера и настройте его для удовлетворения, включая спецификацию целей и действий. Тогда подключите его к своему пользовательскому представлению
menu
выход, наследованный отNSView
.Программно присвойте универсальное меню: Переопределите
defaultMenu
метод классаNSView
чтобы создать и возвратить меню, это характерно для всех экземпляров Вашего подкласса. Это меню по умолчанию также доступно черезNSResponder
menu
метод, если некоторый другойNSMenu
объект был связан с представлением.Программно присвойте специфичное для экземпляра меню: В пользовательском представлении
initWithFrame:
илиawakeFromNib
методы, создайте меню и свяжите его с представлением при помощиsetMenu:
метод (NSResponder
).
После завершения любой из этих процедур Набор Приложения выводит на экран контекстное меню каждый раз, когда пользовательские лево-щелчки управления или щелкают правой кнопкой по представлению. Обратите внимание на то, что Набор Приложения автоматически также проверяет пункты меню контекстных меню, если Вы не запрашиваете его не к.
Если необходимо настроить контекстное меню, можно сделать так путем установки надлежащего объекта как делегат меню и реализации menuWillOpen:
метод для настройки меню, поскольку Вы считаете целесообразным непосредственно перед тем, как это появляется.
Если Вы хотите, чтобы Ваше представление вывело на экран контекстное меню в ответ на события кроме щелчков правой кнопкой мыши и щелчков лево-Управления мыши, можно непосредственно обработать сообщение о событии в надлежащем NSResponder
метод. Например, если бы Вы хотите, чтобы пользователи были в состоянии щелкнуть левой кнопкой по представлению изображения для получения меню опций экспорта, Вы переопределили бы mouseDown:
метод. В Вашей реализации метода создайте меню и затем вызовите NSMenu
метод класса popUpContextMenu:withEvent:forView:
, передача в конечном счете возражает связанный с событием mouseDown и представлением, владеющим контекстным меню. Перечисление 1 иллюстрирует этот подход.
Перечисление 1 , Выводящее на экран контекстное меню после получения лево-события от нажатия мыши
- (void)mouseDown:(NSEvent *)theEvent { |
NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@"Contextual Menu"]; |
[theMenu insertItemWithTitle:@"Beep" action:@selector(beep:) keyEquivalent:@"" atIndex:0]; |
[theMenu insertItemWithTitle:@"Honk" action:@selector(honk:) keyEquivalent:@"" atIndex:1]; |
[NSMenu popUpContextMenu:theMenu withEvent:theEvent forView:self]; |
} |
Контекстные меню, включая любое меню Вы раскрываетесь с popUpContextMenu:withEvent:forView:
, автоматически вставьте пункты меню от любых плагинов контекстного меню, которые пользователь установил в меню. Плагин контекстного меню, который является CFPlugIn
пакет установлен в a Library/Contextual Menu Items
каталог на надлежащем уровне системы, позволяет приложениям и другим формам программного обеспечения расширить список команд, найденных в контекстных меню, таких как Средство поиска. Приложения не должны работать за их элементами для появления. При попытке программно вывести на экран меню, Вы не могли бы хотеть, чтобы появились те элементы. Предпочтительный подход для того, чтобы программно вывести на экран неконтекстное меню должен создать NSPopUpButtonCell
объект, набор, который затем вызывает его меню, и отправляет a attachPopUpWithFrame:inView:
обменивайтесь сообщениями к ячейке кнопки всплывающего меню.