NSPopUpButtonCell с иерархическим меню в NSTableView

У меня есть NSTableView из которых один столбец содержит NSPopUpButtonCells. Этот столбец назначен IBOutlet, Контроллер класса моего приложения создает меню в init и назначает его NSTableColumnDataCell, который является 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? Я полагаю, что вы, но иногда эти вещи легко игнорируются =/

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