Почему NSPopUpButtonCell отображается правильно, когда вызывается только setObjectValue: nil? - PullRequest
2 голосов
/ 22 февраля 2012

У NSTableView есть кратные NSCell с (косвенно через NSTableColumn). NSCell следует шаблону дизайна Flyweight; они печенья. В каждом столбце есть одна ячейка, и ее просят нарисовать себя для каждой строки. "Вот значение, нарисуйте его в первой строке; вот значение для второй строки и т. Д." Это отличается от табличных представлений на основе представлений, которые имеют экземпляр представления на ячейку.

Я вложил в NSPopUpButtonCell подкласс и для каждого setXxxValue: метода я вызываю NSLog(); и пересылаю сообщение суперклассу. Единственный метод, который вызывается (скажем, при добавлении новых строк или обновлении таблицы иным образом), это setObjectValue:. Это ожидается от документации ... но null это единственное, что ему передано !! Должен быть передан NSNumber с индексом выбранного элемента.

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

Вопрос: Как это возможно? Как NSPopUpButtonCell устанавливается в значение, чтобы нарисовать правильное значение для каждой строки. Даже с учетом привязок, это NSTableColumn делает тяжелую работу, нет? Чего мне не хватает?

1 Ответ

0 голосов
/ 22 февраля 2012

«Каждая строка в таблице имеет одно и то же всплывающее меню» - это не обязательно.

В дополнение к установке привязки значения столбца таблицы, установите привязку содержимого ячейки к массивусвойство вашего объекта модели, через контроллер массива.

Вы можете сохранить код, который определяет параметры в модели (просто создайте массив строк).Таким образом, вам не понадобится пользовательский подкласс.

...