我第一次使用NSOutlineView(基于单元格)。我需要返回所选父项的索引。
在上图中,有两个父项。如果我选择“颜色 2”,我想返回 1。如果“颜色”未展开,应用程序将返回 1。如果展开,则返回 6。
- (void)outlineViewSelectionDidChange:(NSNotification *)notification {
NSOutlineView *outlineView = [notification object];
id item = [outlineView itemAtRow:[outlineView selectedRow]];
if ([item objectForKey:@"parent"]) {
NSInteger r = [outlineView selectedRow]; // returning 6
}
}
无论任何父项是否展开,如何正确返回所选父项的索引?看来我的问题与this topic有关。然而,由于我对 NSOutlineView 不太熟悉,我不知道我可以做些什么来改进我的代码。
非常感谢。
最佳答案
-[NSOutlineView itemAtRow:]
返回的 item
是一个 NSTreeNode
实例。这些对象是由 Cocoa 创建的 - 我从来不需要自己创建一个 - 并用于包装从数据源传递到大纲 View 的对象。它们有两个非常有用的属性:representedObject
(类型为id
)和indexPath
(类型为NSIndexPath
)。 representedObject
是被包装的对象(您自己的模型对象之一),而您可以将项目的 indexPath
视为在中建立其确切位置的一种方式。完全展开的轮廓 View - 这就是您所追求的。获得 item
后,将其转换为 NSTreeNode
,然后调用其 indexPath
属性。如果您在问题中概述,相关索引路径将仅包含一个数字 (1
),但索引路径的长度会根据关联项在数据“树”中的位置而变化。例如,展开 Colors 2
时显示的蓝色的索引路径为 [0, 3]
- (void)outlineViewSelectionDidChange:(NSNotification *)notification {
NSOutlineView *outlineView = [notification object];
id item = [outlineView itemAtRow:[outlineView selectedRow]];
NSTreeNode *node = (NSTreeNode *)item;
NSIndexPath *ip = [node indexPath];
}
关于objective-c - NSOutlineView:所选父项的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34493854/