我正在使用包含两列的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的经验,所以要温柔)
答案 0 :(得分:1)
由于我还在与outlineViews和popUpButtons搏斗,我非常想知道这个问题和许多其他问题的答案。我担心我无法真正帮助你,但有一件事引起了我的注意:
我可以为树中的给定项目生成NSMenu
在过去曲折的几周里,我学到了一件事:在使用NSTreeController和数据源时,始终提供NSTreeNodes设置您的真实对象(在本例中为NSMenu)作为representObject。