Отображение контекстного меню
Набор Приложения интерпретирует события «правильная мышь вниз», и события «снизили мышь», измененную Клавишей CTRL как команды для отображения контекстного меню для представления, по которому щелкают. Ваши подклассы представления имеют несколько альтернативных подходов для отображения контекстного меню:
Сконфигурируйте в Интерфейсном Разработчике: Добавьте автономное (беспочвенное) меню к файлу пера и настройте его для удовлетворения, включая спецификацию целей и действий. Тогда подключите его к своему пользовательскому представлению
menuвыход, наследованный отNSView.Программно присвойте универсальное меню: Переопределите
defaultMenuметод классаNSViewчтобы создать и возвратить меню, это характерно для всех экземпляров Вашего подкласса. Это меню по умолчанию также доступно черезNSRespondermenuметод, если некоторый другой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: обменивайтесь сообщениями к ячейке кнопки всплывающего меню.