关闭窗口时,我需要对NSOutlineView中的所有对象执行操作。
(父母和孩子以及孩子的孩子)。 如果项目是否展开并不重要,我只需要在大纲视图中对所有项目执行选择。
感谢
答案 0 :(得分:2)
假设你正在使用NSOutlineViewDataSource而不是绑定,你可以这样做:
- (void)iterateItemsInOutlineView: (NSOutlineView*)outlineView
{
id<NSOutlineViewDataSource> dataSource = outlineView.dataSource;
NSMutableArray* stack = [NSMutableArray array];
do
{
// Pop an item off the stack
id currentItem = stack.lastObject;
if (stack.count)
[stack removeLastObject];
// Push the children onto the stack
const NSUInteger childCount = [dataSource outlineView: outlineView numberOfChildrenOfItem: currentItem];
for (NSUInteger i = 0; i < childCount; ++i)
[stack addObject: [dataSource outlineView: outlineView child: i ofItem: currentItem]];
// Visit the current item.
if (nil != currentItem)
{
// Do whatever you want to do to each item here...
}
} while (stack.count);
}
这应该完全遍历您NSOutlineViewDataSource
所提供的所有对象。
仅供参考:如果你正在使用可可绑定,这将无法正常工作。但是,如果是这种情况,您可以使用与您绑定的NSTreeController(或其他任何)相似的方法(即代理堆栈遍历)。
HTH