Как обеспечить сосуществование NSColorPanel (с использованием NSColorWell) и цветовой панели NSFontPanel?
-
06-07-2019 - |
Вопрос
В моем приложении есть панель настроек, в которой есть NSColorWell
для установки цвета фона и кнопки, которая открывает NSFontPanel
для выбора шрифта.
Поведение, которое я хочу иметь, следующее:
Когда я нажимаю на
NSColorWell
затем перетащите какой-нибудь цвет на панели, я хочу, чтобы он изменил фоновый цвет в моей области «предварительного просмотра» при перетаскивании.Когда я нажимаю кнопку «Изменить шрифт...», я показываю свой
NSFontPanel
и когда я выбираю шрифт, он также должен измениться в моей области «предварительного просмотра».Скажем, я нажимаю на цвет кнопкаNSFontPanel
, я хочу изменить цвет моего шрифта.
По сути, я пытаюсь заставить обе цветные панели (хотя, судя по тому, что я видел, на каждое приложение есть только одна общая панель) работали независимо.
Допустим, прямо сейчас у меня открыты панели шрифтов и цветов.Когда я нажимаю на область цвета в своем окне, она активируется, затем, если я нажимаю кнопку цвета на панели шрифтов, цвет не влияет на шрифт, а скорее на фон, поскольку область цвета остается активированной и потому что я зарегистрировался для изменения цвета. уведомления в моем классе контроллера.
Может ли кто-нибудь дать мне пример конкретного способа кодирования такого поведения?Кажется, существует куча разных способов сделать NSFontPanel
и NSColorPanel
объявиться (NSFontPanel
или NSFontManager
?), а также множество способов обработки событий, исходящих от самих панелей (уведомлений?делегаты (на NSFontManager
или NSFontPanel
)?включение контроллера в цепочку ответчиков?).Я не нашел никаких рекомендаций по идеальному способу одновременной обработки более чем одного источника цвета и немного растерялся.
Заранее спасибо!
Решение
Механизм выбора цвета специально разработан таким образом, чтобы вы могли «активировать» несколько ячеек цвета, а затем одновременно устанавливать их цвет.Я считаю, что причина, по которой кнопка цвета на панели шрифтов не «отпускает» палитру цветов, заключается в том, что она, по-видимому, на самом деле не является «колодцем цвета».Я не заметил такого поведения напрямую, но его легко воспроизвести с помощью простого свежего xib с цветовой палитрой и стандартным текстовым представлением.
По сути, вы можете щелкнуть как лунку, так и цвет шрифта, и как лунка, так и выделенный текст изменятся на выбранный цвет.Можно даже колодец отключить и изменится только текст.Однако вы не можете заставить панель шрифтов «отпустить» палитру цветов, пока не закроете панель шрифтов.
Я бы назвал это ошибкой: http://bugreport.apple.com