2011-02-02 3 views
4

У меня есть NSTableView, из которых один столбец содержит NSPopUpButtonCell s. Этот столбец присваивается IBOutlet. Класс контроллера моего приложения создает в нем меню init и присваивает его данным DataCell NSTableColumn, который является NSPopUpButtonCell.NSPopUpButtonCell с иерархическим меню в NSTableView

меню выглядит следующим образом:

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 или ст.2, обжигают мой источником данных tableView:setObjectValue:forTableColumn:row: и objectValue является 0 или 1, индекс выбранного элемента. Однако, когда я выбираю элемент из одного из подменю, objectValue я получаю -1. Как я смогу получить пункт меню, который был выбран?

+0

Это ваша всплывающая кнопка в режиме выключения или всплывающего окна? –

+0

Это в всплывающем режиме. – nephilim

+0

Тогда, да, мое объяснение ниже. –

ответ

1

Я не думаю, что я бы положился на -tableView: setObjectValue: forTableColumn: row: когда у вас есть сложный набор меню и подменю; если я правильно помню, на самом деле нет «значения объекта» для отображения элементов меню при входе в подменю - NSMenu слишком стар, чтобы использовать NSIndexPath, как вы могли бы надеяться, и не является достаточно сложным, чтобы попытаться отобразить целые числа в меню и подменю. (Кроме того, меню имеют тенденцию меняться очень динамично, поэтому значение «3» будет довольно искаженным.)

Задайте цель и действие на своих NSMenuItems (или возможно только родительском NSMenus), чтобы сделать что-то надежное, когда каждый .

0

Вы используете тот же код, что и для получения элементов 1 и 2? Я полагаю, что вы, но иногда эти вещи легко упускать из вида =/

Смежные вопросы