Всплывающая кнопка со статическим изображением (Cocoa OSX)

Я пытаюсь сделать всплывающую кнопку, которая всегда отображает + как его изображение, и когда вы нажимаете на нее, появляется контекстное меню, которое позволит вам решить, какой тип объекта вы хотите добавить. Есть ли способ сделать это с помощью кнопки NSPopupButton? Я видел в спецификациях для NSPopupButotn, что метод SetImage не имеет никакого эффекта, поэтому кажется, что это, вероятно, не будет работать с использованием этого класса. Это правильно?

4 ответа

Решение

Да, видимый вид NSPopUpButton не подходит для того, что вы хотите.

То, что вы хотите, это обычный NSButton с приложенным меню. В Интерфейсном Разработчике очистите заголовок, установите Рамку на Квадрат, Положение на центральную версию только для значка и изображение на NSAddTemplate,

Затем создайте NSPopUpButton, установите его на "Pull Down", скрытый, и выровняйте его / установите его размер в нижней части NSButton.

Наконец, подключите performClick: в NSButton в performClick: на NSPopUpButton,

Это не будет обрабатывать нажатие кнопки на кнопке; для этого вам нужно написать некоторый код для использования (без рисунка) NSPopUpButtonCell,

Почему бы просто не использовать кнопку NSPopupButton? Использование двух кнопок для выполнения одной задачи кажется неправильным, а также, как уже упоминалось, в отношении удержания кнопки она ведет себя не так, как обычно.

Чтобы заставить всплывающую кнопку работать так, как вам нравится... установите ее в раскрывающемся списке. Не давайте самой всплывающей кнопке никакого имени или изображения. Если у всплывающей кнопки нет имени или изображения, тогда первый пункт меню становится названием кнопки. Пункты меню могут иметь изображения, поэтому не присваивайте первому пункту меню какой-либо заголовок, просто установите его изображение, и это изображение вы увидите во всплывающей кнопке. Для остальных пунктов меню просто добавьте их как обычно после первого пункта меню. Обратите внимание, что если вы программно изменяете пункты меню в коде, просто оставьте первый пункт меню в порядке, и все будет в порядке. Я делаю это в нескольких своих приложениях без проблем.

Ключ должен использовать NSPopUpButtonCell'ssetUsesItemFromMenu:. Документы Apple содержат пример того, как это использовать.

Всплывающая кнопка принимает изображение и заголовок первого пункта меню в связанном с ним меню. Поэтому лучше включить изображение, которое вы хотите отобразить в виде всплывающей кнопки, в качестве первого пункта меню, а затем скрыть его видимость.

Если вы еще не поняли, просмотрите следующее видео один раз, оно наверняка поможет вам понять.

В этом руководстве показано, как создать элемент панели инструментов (NSToolbarItem) с раскрывающимся меню для NSToolbar в Интерфейсном Разработчике: Ссылка

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