NSPopUpButtonCell avec menu hiérarchique dans NSTableView
-
28-10-2019 - |
Question
J'ai un NSTableView
dont une colonne contient NSPopUpButtonCell
s.Cette colonne est affectée à un IBOutlet
.La classe de contrôleur de mon application crée un menu dans son init
et l'assigne au dataCell du NSTableColumn
, qui est le NSPopUpButtonCell
.
Le menu se présente comme suit:
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
Lorsque je clique sur le menu et que je choisis item1 ou item2, le tableView:setObjectValue:forTableColumn:row:
de ma source de données est déclenché et objectValue est 0 ou 1, l'index de l'élément choisi.
Cependant, lorsque je choisis un élément dans l'un des sous-menus, la valeur objectValue que j'obtiens est -1.Comment pourrais-je obtenir l'élément de menu qui a été choisi?
La solution
Je ne pense pas que je me fierais à -tableView: setObjectValue: forTableColumn: row: lorsque vous avez un ensemble complexe de menus et de sous-menus;si je me souviens bien, il n'y a pas vraiment de `` valeur d'objet '' au mappage des éléments de menu lorsque les sous-menus entrent en jeu - NSMenu est trop ancien pour utiliser NSIndexPath comme vous pourriez l'espérer, et n'est pas assez complexe pour essayer de mapper des entiers sur des menuset sous-menus.(De plus, les menus ont tendance à changer beaucoup de manière dynamique, donc la signification de "3" serait assez irrégulière.)
Définissez une cible et une action sur vos NSMenuItems (ou peut-être simplement sur les NSMenus parents) pour faire quelque chose de fiable lorsque chacun est sélectionné.
Autres conseils
Utilisez-vous le même code que vous pour récupérer les éléments 1 et 2?Je suppose que oui, mais parfois ces choses sont facilement négligées= /