折叠NSOutlineView组后如何保持选定的行状态

mor*_*wan 2 xcode cocoa nsoutlineview nstableview swift

我想实现像Finder.app一样工作的侧栏.但我不知道如何在折叠和扩展组后保持行选择状态.

任何想法或建议将不胜感激.

Ren*_*ong 7

你必须自己实现它.系统不为您保留选择的原因是,当项目折叠时,其所有子项实际上都已释放,因此它们根本不存在.

解决方案非常简单直接.

  1. 设置大纲视图以允许空选择(在IB中或通过代码).这将阻止系统在折叠先前选定的项目后自动选择其他项目.
  2. 将所选项目保存在a中ivar,并根据用户交互进行更新.为此,您可能希望实现-outlineViewSelectionDidChange:委托方法.请注意,您应始终确保[[notification object] selectedRow] != -1在更新之前满足,因为倒塌所选择的项目将导致一个消息被发送selectedRow-1.
  3. -outlineViewItemDidExpand委托方法中,如果outlineView.selectedRow-1,请咨询您ivar并通过向-selectRowIndexes:byExtendingSelection:您的邮件发送消息来手动恢复选择NSOutlineView.