2010-04-24 77 views
1

我正在使用一个有两列的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的经验,所以请温和地)。

回答

1

因为我也在摔跤outlineViews和popUpButtons,我非常想知道这个问题和其他许多问题的答案。我怕我真的不能帮你,但有一两件事没有赶上我的眼睛:

我可以在树

在过去的曲折周产生NSMenu对于给定的项目,我学到了一件事情:在使用NSTreeController和数据源时,总是提供NSTreeNodes设置您的真实对象(在这种情况下为NSMenu)作为所代表的对象。