Правильный способ заполнения NSPopUpButtonCell с использованием NSTableViewDataSource

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

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

1 ответ

Решение

Из файла 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 и заполняет его элементами меню.

Это работает, но кажется запутанным.

Другие вопросы по тегам