NSPopUpButtonCell с иерархическим меню в NSTableView
У меня есть NSTableView
из которых один столбец содержит NSPopUpButtonCell
s. Этот столбец назначен IBOutlet
, Контроллер класса моего приложения создает меню в init
и назначает его NSTableColumn
DataCell, который является NSPopUpButtonCell
,
Меню выглядит следующим образом:
NSPopUpButton
NSMenu
NSMenuItem item1
NSMenuItem item2
NSMenuItem item3
NSMenu
NSMenuItem item3_1
NSMenuItem item3_2
NSMenuItem item4
NSMenuItem item4_1
NSMenuItem item4_2
NSMenuItem item4_3
Когда я щелкаю меню и выбираю item1 или item2, мой источник данных tableView:setObjectValue:forTableColumn:row:
срабатывает и objectValue 0 или 1, индекс выбранного элемента. Однако, когда я выбираю элемент из одного из подменю, получаемое значение объекта равно -1. Как я смогу получить пункт меню, который был выбран?
2 ответа
Я не думаю, что я бы полагался на -tableView:setObjectValue:forTableColumn:row: когда у вас есть сложный набор меню и подменю; если я правильно помню, на самом деле не существует "значения объекта" для сопоставления пунктов меню, когда подменю вступают в игру - NSMenu слишком стар, чтобы использовать NSIndexPath, как вы можете надеяться, и не достаточно сложен, чтобы пытаться отобразить целые числа в меню и подменю. (Кроме того, меню, как правило, сильно меняются, поэтому значение "3" будет довольно сложным.)
Установите цель и действие для ваших NSMenuItems (или, возможно, только родительского NSMenus), чтобы сделать что-то надежное, когда каждый выбран.
Используете ли вы тот же код, что и для получения элементов 1 и 2? Я полагаю, что вы, но иногда эти вещи легко игнорируются =/