【问题标题】:NSPopUpButtonCell with hierarchical menu in NSTableViewNSPopUpButtonCell 与 NSTableView 中的分层菜单
【发布时间】:2011-03-19 02:26:09
【问题描述】:

我有一个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。我如何才能获得选择的菜单项?

【问题讨论】:

  • 你的弹出按钮是下拉模式还是弹出模式?
  • 那么,是的,我的解释如下。

标签: objective-c cocoa nstableview nspopupbuttoncell


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多