Привязки какао: объединить фиксированные элементы с элементами, связанными с ArrayController, в NSPopupButton - PullRequest
1 голос
/ 08 августа 2009

Я пытаюсь сделать выбор цвета, используя кнопку NSPopupButton, а внизу я хотел бы использовать разделитель и опцию «Custom…». Можно ли загрузить цвета из массива, затем прикрепить разделитель и «пользовательский» элемент снизу? если да, то как?

Спасибо!

Ответы [ 4 ]

1 голос
/ 09 сентября 2009

Я создал аналогичный PopUpButton, но пока не привязываю цвета по умолчанию к фиксированному массиву (хотя я сейчас над этим работаю). здесь есть два аппроксимации - оба могут считаться хуками пуристами, но они выполняют свою работу.

  1. Подкласс NSPopUpButtonCell и переопределить attachPopUpWithFrame, чтобы добавить свои собственные элементы меню. Я не пробовал это вместе со связанными предметами.

  2. Жестко закодируйте объект 'Custom ..' в вашем массиве и, используя действие отображаемой цветовой панели, добавьте новый элемент в массив.

0 голосов
/ 21 марта 2015

Это возможно с привязками, начиная с Mac OS X 10.5, с использованием тега «размещение контента»; см. мой ответ здесь:

Элемент разделителя в кнопке NSPopup с привязками

0 голосов
/ 08 августа 2009

Вы должны действительно использовать NSColorWell вместо того, чтобы создавать свое собственное. Одна из причин, по которой Apple имеет лучший графический интерфейс, чем у других платформ (особенно Linux), заключается в том, что разработчики используют стандартные компоненты для подобных вещей. Аргументы типа «потому что я думаю, что это делает интерфейс более лаконичным», являются причинами, почему GIMP является таким ярким примером того, как не разрабатывать графический интерфейс.

Тем не менее, в основном вы пытаетесь определить динамическое меню, а не список фиксированного размера (как это можно сделать в InterfaceBuilder). Вы можете сделать это с помощью классов NSMenu и NSMenuItem.

Руководство по документации MenuList

То, что вам нужно сделать, это вместо отображения меню по требованию, это заполнить его, когда приложение запустится с массивом по умолчанию. Затем, когда массив изменяется (через объекты вашей модели), инициируйте пересоздание меню. Также можно перехватить меню с помощью menuNeedsUpdate: message.

0 голосов
/ 08 августа 2009

Без использования привязок, нет. Вы можете сделать «Custom…» достаточно легко, но не разделитель.

Почему бы вообще не использовать NSColorWell?

...