Обнаружение измененного выделения NSColorWell - PullRequest
4 голосов
/ 20 июля 2011

Я искал, как использовать NSColorWell в моем приложении, но, похоже, нет много документации по нему.

Есть ли способ встроить палитру цветов (например, NSColorWell / NSColorPanel) прямо в мое представление? При нажатии на лунку всегда отображается новое окно выбора цвета. Разве это не может быть как-то встроено?

У меня есть пользовательский класс NSButton, которому я передаю цвет из моего NSColorWell. Чтобы сделать это, мне нужно заставить пользователя выбрать цвет, а затем нажать кнопку, чтобы отправить этот цвет в мой пользовательский класс. Есть ли способ просто определить, когда новый цвет выбран прямо из палитры цветов?

Ответы [ 3 ]

6 голосов
/ 20 июля 2011

Для проблемы 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"]

Есть способ сделать это и с привязками, но с этими двумя все в порядке.

1 голос
/ 09 марта 2016

Для 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)")
        } 
    }
0 голосов
/ 08 апреля 2013

Для проблемы с цветной панелью я тоже искал такую ​​вещь. Закрытия, которые я смог найти, были на CocoaControls . К сожалению, это работает только на 10.7+ (так как он использует NSPopover) и похоже, что он использует частный API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...