折叠 NSOutlineView Group 后如何保持选中行状态

How to keep the selected row state after collapsing the NSOutlineView Group

我想实现一个类似于 Finder.app 的边栏。但是我不知道如何让它在折叠和展开组后保持行选择状态。

如有任何想法或建议,我们将不胜感激。

您必须自己实施。系统不为你保留选择的原因是当一个项目被折叠时,它的所有子项目实际上都被释放了,所以它们根本不存在。

解决方案非常简单直接。

  1. 设置大纲视图以允许空选择(在 IB 中或通过代码)。这将防止系统在先前选择的项目折叠后自动选择另一个项目。
  2. 将所选项目保存在 ivar 中,并更新它以响应用户交互。为此,您可能需要实施 -outlineViewSelectionDidChange: 委托方法。请注意,您应该始终确保 [[notification object] selectedRow] != -1 在更新之前得到满足,因为折叠所选项目将导致此消息以 -1selectedRow 发送。
  3. -outlineViewItemDidExpand 委托方法中,如果 outlineView.selectedRow-1,请咨询您的 ivar 并通过发送 -selectRowIndexes:byExtendingSelection: 消息手动恢复选择你的 NSOutlineView.