Правильный способ заполнения NSPopUpButtonCell с использованием NSTableViewDataSource - PullRequest
0 голосов
/ 09 ноября 2011

Допустим, у человека много машин, и у них есть любимая машина. Я не могу найти в документах, где описывается правильный способ заполнения NSPopUpButtonCell в виде таблицы, по-разному для каждой строки.

Например, у меня будет по 1 строке для каждого человека, в столбце «Любимая машина» будет NSPopUpButtonCell. Каждый ряд имеет разные пункты меню. Ряд 1 (Камаро, Кавалер, F150) Ряд 2 (745ли, Камаро, Таун Кар) и т. Д. *

1 Ответ

1 голос
/ 17 февраля 2012

Из файла NSTableColumn.h

Разрешает индивидуальную настройку ячейки, используемой для этого NSTableColumn.NSTableView вызовет - [tableColumn dataCellForRow:] при рисовании «строки».По умолчанию это просто вызывает -dataCell.Субклассеры могут переопределять -dataCellForRow: если им нужно потенциально использовать разные ячейки для разных строк.На Leopard и выше, метод делегата NSTableView -tableView: dataCellForTableColumn: row: может использоваться в качестве удобства, чтобы избежать создания подкласса NSTableColumn.В обоих случаях возвращаемая ячейка должна правильно реализовывать -copyWithZone:, поскольку NSTableView может делать копии ячеек.

Таблица запросит источник данных для selectedIndex во всплывающей ячейке, а затем запроситделегат для пунктов меню.У меня был мой делегат и источник данных одного и того же объекта, давайте назовем его tableViewController.

Когда tableViewController предоставляет selectedIndex в objectValueForTableColumn: (метод источника данных), меню не содержит все времена меню, поэтому мне нужно вызвать dataCellForRow, чтобы получить меню и индексвыбранный элемент в меню.
tableViewController реализует dataCellForRow: который создает новый NSPopUpButtonCell и заполняет его элементами меню.

Работает, но выглядит запутанным.

...