Всплывающая кнопка со статическим изображением (Cocoa OSX)
Я пытаюсь сделать всплывающую кнопку, которая всегда отображает + как его изображение, и когда вы нажимаете на нее, появляется контекстное меню, которое позволит вам решить, какой тип объекта вы хотите добавить. Есть ли способ сделать это с помощью кнопки NSPopupButton? Я видел в спецификациях для NSPopupButotn, что метод SetImage не имеет никакого эффекта, поэтому кажется, что это, вероятно, не будет работать с использованием этого класса. Это правильно?
4 ответа
Да, видимый вид NSPopUpButton
не подходит для того, что вы хотите.
То, что вы хотите, это обычный NSButton
с приложенным меню. В Интерфейсном Разработчике очистите заголовок, установите Рамку на Квадрат, Положение на центральную версию только для значка и изображение на NSAddTemplate
,
Затем создайте NSPopUpButton
, установите его на "Pull Down", скрытый, и выровняйте его / установите его размер в нижней части NSButton.
Наконец, подключите performClick:
в NSButton
в performClick:
на NSPopUpButton
,
Это не будет обрабатывать нажатие кнопки на кнопке; для этого вам нужно написать некоторый код для использования (без рисунка) NSPopUpButtonCell
,
Почему бы просто не использовать кнопку NSPopupButton? Использование двух кнопок для выполнения одной задачи кажется неправильным, а также, как уже упоминалось, в отношении удержания кнопки она ведет себя не так, как обычно.
Чтобы заставить всплывающую кнопку работать так, как вам нравится... установите ее в раскрывающемся списке. Не давайте самой всплывающей кнопке никакого имени или изображения. Если у всплывающей кнопки нет имени или изображения, тогда первый пункт меню становится названием кнопки. Пункты меню могут иметь изображения, поэтому не присваивайте первому пункту меню какой-либо заголовок, просто установите его изображение, и это изображение вы увидите во всплывающей кнопке. Для остальных пунктов меню просто добавьте их как обычно после первого пункта меню. Обратите внимание, что если вы программно изменяете пункты меню в коде, просто оставьте первый пункт меню в порядке, и все будет в порядке. Я делаю это в нескольких своих приложениях без проблем.
Ключ должен использовать NSPopUpButtonCell's
setUsesItemFromMenu
:. Документы Apple содержат пример того, как это использовать.
Всплывающая кнопка принимает изображение и заголовок первого пункта меню в связанном с ним меню. Поэтому лучше включить изображение, которое вы хотите отобразить в виде всплывающей кнопки, в качестве первого пункта меню, а затем скрыть его видимость.
Если вы еще не поняли, просмотрите следующее видео один раз, оно наверняка поможет вам понять.
В этом руководстве показано, как создать элемент панели инструментов (NSToolbarItem) с раскрывающимся меню для NSToolbar в Интерфейсном Разработчике: Ссылка