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

时间:2015-05-11 06:04:53

标签: xcode swift cocoa nstableview nsoutlineview

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

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

1 个答案:

答案 0 :(得分:5)

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

解决方案非常简单直接。

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