1

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

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

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

此外,我手动调用-selectItem:实例NSPopUpButtonCell,这似乎是错误的。相比之下,左边的列,它只是一个NSTextFieldCell,一切正常(尽管被允许,它所要做的就是从项目中读取值并呈现它)。

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

4

1 回答 1

1

因为我也在与outlineViews 和popUpButtons 搏斗,所以我非常想知道这个问题和许多其他问题的答案。恐怕我真的帮不了你,但有一件事引起了我的注意:

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

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

于 2011-04-05T09:26:04.387 回答