gpt4 book ai didi

cocoa - NSOutlineView 检测子项何时折叠

转载 作者:行者123 更新时间:2023-12-03 17:33:18 30 4
gpt4 key购买 nike

我正在尝试将项目的实际折叠/展开状态存储在 NSOutlineView 中,以便稍后可以恢复。 NSOutlineViewDelegate 上有两种方法可用:

  • outlineViewItemDidExpand(通知)
  • outlineViewItemDidCollapse(通知)

问题在于,这些方法不仅会针对用户单击的项目调用,还会针对可折叠的子项调用。示例:

- a
-- b
--- c

a 折叠时,outlineViewItemDidCollapse 被调用两次,一次针对 b,一次针对 a。将两者标记为 折叠 是不正确的,因为 b 仍应展开,而 c 在再次展开 a 后应可见。因此 b 的实际状态应该是展开

当用户按住Option键单击a时,所有子项也会折叠(outlineView.collapseItem(item,collapseChildren: true))。再次展开 a 后,b 应保持折叠状态。在这种情况下,b 的状态应为折叠

两种不同的状态:

  • a:折叠b:展开(但由于父项而隐藏)
  • a:折叠b:折叠(由于父项而隐藏)

有什么方法可以区分这两种操作/状态,以便我以后可以正确恢复它?

最佳答案

一些想法:

NSOutlineView可以保存和恢复展开的项目( autosaveExpandedItems )。可以从 NSUserDefaults 检索设置。关键是NSOutlineView Items <autosaveName> .

子类NSOutlineView并覆盖expandItem(_:expandChildren:)collapseItem(_:collapseChildren:) 。不会为子级调用这些方法。

使用 outlineViewItemWillExpand(_:) 中的当前事件也许可以确定哪个项目被展开或折叠。和outlineViewItemWillCollapse(_:) .

关于cocoa - NSOutlineView 检测子项何时折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57379570/

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