2012-02-22 2 views
2

A NSTableView имеет кратные NSCell s (косвенно через NSTableColumn). NSCell следует за шаблоном дизайна Flyweight; они куки-резаки. В столбце есть одна ячейка, и ее просят рисовать для каждой строки. «Вот значение, нарисуйте его на первой строке, вот значение для второй строки и т. Д.» Это в отличие от табличных представлений, основанных на представлении, которые имеют экземпляр представления на ячейку.Почему NSPopUpButtonCell отображается правильно, когда только setObjectValue: nil вызывается?

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

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

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

+0

То же самое: пользовательский подкласс NSPopUpButtonCell, где мне нужно изменить записи в меню, 'setObjectValue:' - это только каждый вызов с нулем. Какие-нибудь дополнительные сведения по этой проблеме? – Jay

ответ

0

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

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

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

+0

1) Я согласен, что вы можете иметь разные пункты в меню в строке ... но это все тот же экземпляр NSMenu. Вызов 'setMenu:' для строки кажется мне расточительным; 2) Я не считаю, что вам нужно (и не должно) установить привязку ячейки. NSTableColumn заботится о нем для вас (если у вас нет пользовательских привязок). –

+0

Я не уверен, что вы подразумеваете под «вызовом setMenu:», но насколько я знаю, привязка не настраивает меню для каждой строки. Он настраивает его только тогда, когда меню будет отображаться. – paulmelnikow