Обнаружение измененного выделения NSColorWell
Я искал, как использовать NSColorWell
в моем приложении, но, кажется, не так много документации по нему.
Есть ли способ вставить палитру цветов (например, NSColorWell
/NSColorPanel
) прямо на мой взгляд? При нажатии на лунку всегда отображается новое окно выбора цвета. Разве это не может быть как-то встроено?
У меня есть обычай NSButton
класс, которому я передаю цвет от моего NSColorWell
, Чтобы сделать это, мне нужно заставить пользователя выбрать цвет, а затем нажать кнопку, чтобы отправить этот цвет в мой пользовательский класс. Есть ли способ просто определить, когда новый цвет выбран прямо из палитры цветов?
3 ответа
Для проблемы 1 нет, это поведение системы для NSColorWell
, Не нравится это? сделать свой собственный.
Проблема 2 имеет два возможных решения.
Метод 1: Соедините действие из цветовой лунки с вашим объектом в IB и прочитайте цвет цветной лунки через розетку из вашего класса. Любое изменение цвета в скважине отправит сообщение выбранному вами селектору.
Способ 2: добавить свой объект в качестве наблюдателя в color
имущество
[colorwell addObserver:self forKeyPath:@"color" options:0 context:NULL];
затем реализовать
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
Любое изменение цвета вызовет этот метод.
Обязательно оторваться от цвета хорошо в dealloc
или другой метод разбивки:
[colorwell removeObserver:self forKeyPath:@"color"]
Есть способ сделать это и с привязками, но с этими двумя все в порядке.
Для Swift 2 я использую этот код:
@IBOutlet weak var colorSelector: NSColorWell!
override func viewDidAppear() {
super.viewDidAppear()
self.colorSelector.addObserver(self, forKeyPath: "color", options: .New, context: nil)
}
override func viewDidDisappear(){
super.viewDidDisappear()
self.colorSelector.removeObserver(self, forKeyPath:"color")
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
print("keyPath=>\(keyPath)")
if (keyPath! == "color") {
print("object=>\(self.colorSelector.color)")
}
}
Для проблемы с цветной панелью я тоже искал такую вещь. Закрытия, которые я мог найти, были на CocoaControls. К сожалению, это работает только на 10.7+ (поскольку он использует NSPopover), и похоже, что он использует частный API.