gpt4 book ai didi

cocoa - 实现类似 Finder 的 TreeView ,并使用 NSOutlineview 延迟加载来表示其节点

转载 作者:行者123 更新时间:2023-12-03 17:46:07 26 4
gpt4 key购买 nike

在 NSOutlineview 中实现大文件系统树时,当用户单击节点的左侧向下箭头三角形图标时,它缺少事件通知。当将大量文件节点延迟加载到目录节点并将其表示为 NSOutlineview 时,这一点非常重要。否则,开发人员必须将整个目录加载到其中,这样加载将迫使最终用户等待,这是 Not Acceptable 。简而言之,当前版本的 NSOutlineview 无法实现此问题导致的延迟加载。有没有人遇到这个问题或有替代解决方案来使用 Cocoa NSOutlineview 实现类似 Finder 的 TreeView ,任何帮助将不胜感激。

此外:

当点击图标时,NSOutlineview 不会发出 OutlineViewItemWillExpand 事件,并且即使发出该事件,仍然缺乏足够的信息来获取哪个节点将展开,[NSOutlineview selectedRow] 无法工作,因为将要展开的节点尚未被扩展尚未选择。

最佳答案

我在 NSOutlineViewDataSource 中的以下调用中加载我的子节点:

func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
guard let node = item as? Node else { return false }
return node.children.count > 0
}

我的 Node 类的 children 属性是惰性的,因此被迫在此处加载。

此方法仅在大纲 View 中可见的节点上调用。这样,您只需加载可见树前面的一层。如果存在子项,则显示三角形(展开箭头)将可见。

如果您有一种有效的方法来了解节点的子节点数量,而无需实际加载它们,那么最好在 outlineView(_: isItemExpandable:) 中返回子节点数量,并然后按照 Willeke 在评论中建议的那样在 outlineViewItemWillExpand(_:) 中进行实际加载。

关于cocoa - 实现类似 Finder 的 TreeView ,并使用 NSOutlineview 延迟加载来表示其节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60434451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com