Как сделать NSPopupButton с меню с изображениями и текстом?

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

Мне удалось привязать NSPopupButton к моему массиву элементов, но для изображения нет записи привязки. Я думал, что смогу поместить туда ячейку и связать ячейку как изображение и как текст, но я не могу найти подходящую ячейку в IB.

Есть ли чистый и простой способ сделать это с помощью привязок? Должен ли я писать пользовательскую ячейку?


person Michael Bishop    schedule 23.01.2010    source источник


Ответы (2)


Невозможно связать изображения, а также заголовки пунктов меню с помощью стандартного NSPopUpButton. Вам нужно будет подклассировать его и написать IBPlugin, чтобы выставить подкласс. И, конечно же, вы должны обращаться с клеткой.

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

person Peter Hosey    schedule 23.01.2010
comment
Я мог бы добавить, что нашел хороший пример кода, который, по крайней мере, дает мне ячейку... developer.apple.com/mac/library/samplecode/SourceView/ Внутри есть класс ImageAndTextCell. - person Michael Bishop; 24.01.2010
comment
Да, но это не поможет вам с NSPopUpButton, для которого требуется NSPopUpButtonCell. Ячейка другого типа не будет знать, как отображать и отслеживать меню. Невозможно назначить вторую ячейку для работы по отображению объектов контента, так как это работа пунктов меню. - person Peter Hosey; 24.01.2010

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

person Eimantas    schedule 23.01.2010
comment
Было бы здорово, если бы он привязывал один уже существующий пункт меню. Вопрос подразумевает, что он привязал саму всплывающую кнопку, чтобы она динамически генерировала пункты меню. - person Peter Hosey; 23.01.2010