objective-c – NSOutlineView:仅展开特定类的所有对象

objective-c – NSOutlineView:仅展开特定类的所有对象,第1张

概述在NSOutlineView中扩展特定类的所有对象的最有效方法是什么? (我的大纲视图的数据源是NSTreeController). 让我说我有 classAclassA - classA - classC - classC - classB - classC - classCclassB - classC 在NSOutlineVIEw中扩展特定类的所有对象的最有效方法是什么? (我的大纲视图的数据源是nstreecontroller).

让我说我有

classAclassA    - classA        - classC        - classC    - classB        - classC        - classCclassB   - classC

我想只扩展classA对象.我是否需要遍历整个三个检查哪个类属于每个对象?

UPDATE
对不起,我得纠正一下. outlineVIEw对象是来自nstreecontroller数据源的NSTreeNodes.只有“representObject”才是我的自定义类.

因此具有这些类的结构是正确的,但它们不能作为大纲视图的节点直接访问.

解决方法 对于它的价值,我在评论中提到的重要“胶水”或多或少直接来自这篇伟大的博文: Saving the expand state of a NSOutlineView.

我获取了树中的所有类,并使它们成为具有扩展属性的抽象类的子类,因此NSTreeNode中的每个代表对象都已扩展为属性.

但是,如果您不关心在数据模型中持续扩展,则可能甚至不需要这样做.

直截了当的做法是迭代行:

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];    }

…你会注意到for循环从引用的博客文章中借用了很多结构.

所以我猜我的答案是懒惰的,“是的,迭代整棵树.”至少显示的树.

编辑:对于那些对MVC有点过分热心的人,我现在觉得有必要指定上面的代码应该在你用作NSOutlineVIEw控制器的类中,它通常会实现< NSOutlineVIEwDelegate>

总结

以上是内存溢出为你收集整理的objective-c – NSOutlineView:仅展开特定类的所有对象全部内容,希望文章能够帮你解决objective-c – NSOutlineView:仅展开特定类的所有对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1011552.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存