我正在使用一个有两列的NSOutlineView
。我的dataSource
为大纲视图提供了一个代表文件类型的自定义类的项目树(也就是说,您使用UTI初始化它)。第一列是文件类型的显示名称(例如,“源代码”,“Interface Builder NIB文档”等)。第二列是一个NSPopUpButtonCell
,它应该允许用户为给定的文档类型选择一个处理程序(想想Xcode的“文件类型”偏好窗格,而且你几乎是这样)。NSOutlineView中动态填充的NSPopUpButtonCell菜单
我可以为树中的给定项目生成一个NSMenu
,填充基于UTI的启动服务数据库条目的选项,并附带相关的应用程序图标等等。实际上,菜单本身非常有效,通过NSPopUpButtonCellWillPopUpNotification
进行填充。
问题是,尽我所能,当菜单不是弹出的单元格总是包含两个东西中的一个:要么是空字符串,要么是单元格的默认文本,前者如果该项目上的-handlerName
的结果(分配给该列的属性)为非nil
,否则为后者。
此外,我正在NSPopUpButtonCell
实例上手动调用-selectItem:
,这似乎是错误的。相比之下,左侧的列仅仅是一个NSTextFieldCell
,一切正常(虽然被授予,但所要做的只是从项目中读取值并呈现它)。 (免责声明:我在Cocoa UI的东西里相当新,我知道Objective-C和许多其他编程语言,但是我没有大量构建Mac OS X UI的经验,所以请温和地)。