ane*_*yzm 5 macos cocoa objective-c
扩展特定类的所有对象的最有效方法是NSOutlineView什么?(我的大纲视图的数据源是a NSTreeController).
让我说我有
classA
classA
- classA
- classC
- classC
- classB
- classC
- classC
classB
- classC
Run Code Online (Sandbox Code Playgroud)
我想只扩展classA对象.我是否需要遍历整个三个检查哪个类属于每个对象?
更新 对不起,我必须做出更正.outlineView对象是来自NSTreeController数据源的NSTreeNodes.只有"representObject"才是我的自定义类.
因此具有这些类的结构是正确的,但它们不能作为大纲视图的节点直接访问.
无论如何,我在评论中提到的重要“粘合剂”或多或少直接来自这篇精彩的博客文章:保存 NSOutlineView 的展开状态。
我获取了树中的所有类,并使它们成为具有expanded属性的抽象类的子类,因此representedObjectan 中的每个类NSTreeNode都有expanded一个属性。
expanded但如果您不关心数据模型的持久性,您甚至可能不需要这样做。
最简单的方法就是迭代行:
for (NSUInteger row = 0; row < [outlineView numberOfRows]; row++)
{
// Expand item if it's an classA
NSTreeNode* treeNode = [outlineView itemAtRow:row];
if ([treeNode.representedObject isKindOfClass:[ClassA class]])
[sender.animator expandItem:treeNode];
}
Run Code Online (Sandbox Code Playgroud)
...您会注意到 for 循环借用了引用的博客文章中的许多结构。
所以我想我的回答是懒惰的,“是的,迭代整棵树。” 至少显示的树。
编辑: 对于那些对 MVC 有点过于热心的人,我现在觉得有必要指定上述代码应该位于您用作控制器的类中NSOutlineView,该类通常会实现<NSOutlineViewDelegate>
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |