Как определить изменение цвета цветовой панели в приложении Mac Catalyst?

В Mac Catalyst есть элемент панели инструментов по умолчанию, на котором отображается цветная панель.

https://developer.apple.com/documentation/appkit/nstoolbaritem/identifier/1531463-showcolors

Он отображается нормально, но я не могу найти способ обнаружить изменение цвета на этой цветовой панели. Кто-нибудь знает как это сделать?

введите описание изображения здесь


person sarunw    schedule 07.09.2020    source источник


Ответы (1)


При щелчке по элементу панели инструментов отображается экземпляр NSColorPanel. К выбранному цвету можно получить доступ из NSColorPanel.color, но у нас нет ссылки на показанную панель. Приложениям Mac Catalyst не виден даже класс NSColorPanel.

К счастью, при выборе цвета появляется уведомление. в цветной панели. Итак, все, что нам нужно, это наблюдать за этим уведомлением, чтобы получить ссылку на экземпляр NSColorPanel, а затем получить доступ к его свойству color:

NotificationCenter.default.addObserver(forName: .init("NSColorPanelColorDidChangeNotification"), object: nil, queue: nil) { notification in
    let color = (notification.object as? NSObject)?.value(forKey: "color") as? UIColor
    print("Color changed", color)
}
person Hejazi    schedule 12.09.2020
comment
Это работа, но не уверен, что она пройдет проверку или нет. - person sarunw; 15.09.2020
comment
Я почти уверен, что так и будет. Здесь у вас нет доступа к частному API. Все задокументировано. - person Hejazi; 15.09.2020
comment
@Hejazi, пожалуйста, предоставьте код Objective-C? - person Yogendra Patel; 31.12.2020
comment
@YogendraPatel Что ж, это домашнее задание для вас :) Если серьезно, это базовое прослушивание событий с использованием NSNotificationCenter. Вы легко можете сделать это самостоятельно. - person Hejazi; 01.01.2021