NSOutlineView中动态填充的NSPopUpButtonCell菜单

时间:2010-04-24 10:53:35

标签: objective-c cocoa macos nsoutlineview nspopupbuttoncell

我正在使用包含两列的NSOutlineView。我的dataSource为大纲视图提供了一个自定义类的项目树,表示文件类型(即,您使用UTI初始化它)。第一列是文件类型的显示名称(例如,“源代码”,“Interface Builder NIB文档”等)。第二列是NSPopUpButtonCell,它应该允许用户为给定的文档类型选择一个处理程序(想想Xcode的“文件类型”偏好设置面板,你就在那里)。

我可以为树中的给定项生成NSMenu,填充基于UTI的Launch Services数据库条目的选项,以及相关的应用程序图标等等。事实上,菜单本身运行得非常好,通过NSPopUpButtonCellWillPopUpNotification填充。

问题是,尽可能尝试,弹出菜单 时的单元格总是包含以下两种情况之一:空字符串或单元格的默认文本,如果项目-handlerName的结果(分配给列的属性)不是nil,则为前者,否则为后者。

此外,我在-selectItem:实例上手动调用NSPopUpButtonCell,这似乎是错误的。相比之下,左侧列只是一个NSTextFieldCell,一切正常(尽管已经授予,但它所要做的就是从项目中读取并显示它)。

(免责声明:我在Cocoa UI方面相当新;我知道Objective-C和许多其他编程语言,但我没有很多构建Mac OS X UI的经验,所以要温柔)

1 个答案:

答案 0 :(得分:1)

由于我还在与outlineViews和popUpButtons搏斗,我非常想知道这个问题和许多其他问题的答案。我担心我无法真正帮助你,但有一件事引起了我的注意:

  

我可以为树中的给定项目生成NSMenu

在过去曲折的几周里,我学到了一件事:在使用NSTreeController和数据源时,始终提供NSTreeNodes设置您的真实对象(在本例中为NSMenu)作为representObject。