我想实现一个类似于 Finder.app 的边栏。但是我不知道如何让它在折叠和展开组后保持行选择状态。
任何想法或建议将不胜感激。
最佳答案
您必须自己实现。系统不为您保留选择的原因是当一个项目被折叠时,它的所有子项目实际上都被释放,所以它们根本不存在。
解决方案非常简单直接。
- 设置大纲 View 以允许空选择(在 IB 中或通过代码)。这将防止系统在先前选择的项目折叠后自动选择另一个项目。
- 将所选项目保存在
ivar
中,并更新它以响应用户交互。为此,您可能需要实现-outlineViewSelectionDidChange:
委托(delegate)方法。请注意,您应该始终确保[[notification object] selectedRow] != -1
在更新之前得到满足,因为折叠所选项目将导致此消息与selectedRow
的-1
。 - 在
-outlineViewItemDidExpand
委托(delegate)方法中,如果outlineView.selectedRow
为-1
,请查阅您的ivar
并通过向您的NSOutlineView
发送-selectRowIndexes:byExtendingSelection:
消息手动恢复选择。
关于xcode - 折叠 NSOutlineView Group 后如何保持选中行状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30160586/