NSPopUpButtonCell with hierarchical menu in NSTableView
-
28-10-2019 - |
Question
I have an NSTableView
of which one column contains NSPopUpButtonCell
s. This column is assigned to an IBOutlet
. My application's controller class creates a menu in it's init
and assigns it to the NSTableColumn
's dataCell, which is the NSPopUpButtonCell
.
The menu looks as follows:
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
When I click the menu and choose item1 or item2, my data source's tableView:setObjectValue:forTableColumn:row:
is fired and the objectValue is 0 or 1, the index of the chosen item.
However, when I pick an item from one of the submenus, the objectValue I get is -1. How would I be able to get the menu item which was chosen?
Solution
I don't think I'd rely on -tableView:setObjectValue:forTableColumn:row: when you have a complex set of menus and submenus; if I recall correctly there isn't really an 'object value' to menu item mapping when submenus come into play -- NSMenu is too old to use NSIndexPath like you might hope, and isn't complex enough to try to map integers to menus and submenus. (Plus, menus tend to change a lot dynamically, so the meaning of "3" would be pretty squirmy.)
Set a target and action on your NSMenuItems (or possibly just the parent NSMenus) to do something reliable when each is selected.
OTHER TIPS
Are you using the same code as you are to retrieve item 1 and 2? I suppose you are, but sometimes these things are easily overlooked =/