4

我有一个NSTableView其中一列包含NSPopUpButtonCells。此列分配给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,即所选项目的索引。但是,当我从其中一个子菜单中选择一个项目时,我得到的 objectValue 是-1。我怎样才能获得选择的菜单项?

4

2 回答 2

1

我不认为我会依赖 -tableView:setObjectValue:forTableColumn:row: 当您有一组复杂的菜单和子菜单时;如果我没记错的话,当子菜单发挥作用时,菜单项映射并没有真正的“对象值”——NSMenu 太旧了,不能像你希望的那样使用 NSIndexPath,而且还不够复杂,无法尝试将整数映射到菜单和子菜单。(另外,菜单往往会动态变化很多,所以“3”的意思会很混乱。)

在您的 NSMenuItems(或者可能只是父 NSMenus)上设置一个目标和操作,以便在每个被选中时执行一些可靠的操作。

于 2011-03-18T18:26:09.147 回答
0

您是否使用与检索项目 1 和 2 相同的代码?我想你是,但有时这些事情很容易被忽视 =/

于 2011-02-20T09:03:02.833 回答