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

标签 xcode swift cocoa nstableview nsoutlineview

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

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

最佳答案

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

解决方案非常简单直接。

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

关于xcode - 折叠 NSOutlineView Group 后如何保持选中行状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30160586/

相关文章:

ios - Xcode Interface Builder 单独的 ViewController 来控制一个 subview

objective-c - 如何查看 Swift 函数的 Objective-C 名称

xcode - 如何在 XCode 中创建没有 Storyboard或界面生成器的 Cocoa 应用程序?

ios - 在虚拟机上安装 CocoaPods

objective-c - 获取托管应用程序的 Mac 类型的简单代码?即 "MacBook Pro (Retina, 15-inch, Late 2013)"

ios - Cocoapods 警告 - CocoaPods 没有设置项目的基本配置,因为你的项目已经有一个自定义配置集

swift - 尝试识别发件人时单选按钮缺少标识符

swift : Sprite Animation Bug

objective-c - 使用 Cocoa 为文件夹创建图标

objective-c - 按住上下文菜单 (NSMenu)。单击窗口上的任意位置时不允许关闭上下文菜单