问题标签 [nsoutlineview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1350 浏览

cocoa - 如何使 NSOutlineView 缩进多列?

使NSOutlineView缩进多列的最简单或推荐的方法是什么?默认情况下,它只缩进大纲列;据我所知,没有内置支持使其缩进其他列。

我有一个 NSOutlineView,它显示了两组分层数据之间的比较。为了视觉吸引力,如果大纲列中的某些项目是缩进的,我想将另一列中同一行上的项目缩进相同的缩进量。(还有第三列显示比较两个项目的结果,此列不应该缩进。)

这只能通过继承 NSOutlineView 来实现吗?在子类中需要覆盖什么?或者有没有更简单的方法让它缩进多列?

0 投票
2 回答
487 浏览

objective-c - 异构 NSTreeController

我有一个 NSTreeController(向 NSOutlineView 提供内容)。我希望顶级对象属于一个类,而所有其他对象(因此,任何级别的孩子)属于另一个。解决这个问题的最佳方法是什么?

我想我需要以某种方式改变至少add, addChild,insert和的行为insertChild。不过,我希望找到一种简单的方法来仅在一个位置解决此问题,而不是更改四种不同的方法。

0 投票
4 回答
3798 浏览

cocoa - 展开从数据源加载数据的 NSOutlineView 的所有项

首先,我是可可开发的新手,所以我想我可能试图以错误的方式做到这一点,但这里是:

我有一个NSOutlineView从实现中加载数据的方法NSOutlineViewDataSource。我希望所有项目在加载后展开,但我似乎找不到在数据加载完成时触发的事件,所以我可以向[outlineView expandItem: nil expandChildren: YES]它发送一个。

我查看了NSOutlineViewDelegate协议,但找不到适合此通话的地点。解决这个问题的最佳方法是什么?

0 投票
1 回答
636 浏览

objective-c - 实现一个静态的 NSOutlineView

我很难拼凑足够多的知识片段来实现一个 NSOutlineView,它具有在 NSArray 中定义的静态、永不改变的结构。这个链接很棒,但它并没有帮助我掌握子菜单。我认为它们只是嵌套的 NSArrays,但我不清楚。

假设我们在 NSArray 中有一个 NSArray,定义为

文本在 outlineView:objectValueForTableColumn:byItem: 中定义。

结果是“1”、“(”(可扩展)和“3”。NSLog 显示以“(”开头的数组,因此是第二项。扩展它会由于“超出界限”而导致崩溃。我尝试使用parentForItem:但无法弄清楚将结果与什么进行比较。

我错过了什么?

0 投票
1 回答
268 浏览

objective-c - NSOutlineViewDelegate - 需要类似 didFinishEditing 的东西

NSOutlineViewDelegatehasoutlineView:shouldEditTableColumn:item:在编辑单元格之前被调用。我需要在用户完成编辑单元格后调用一个类似的方法(以触发一些计算)。我应该在哪里寻找这个事件?

0 投票
1 回答
467 浏览

objective-c - NSOutlineView 中动态填充的 NSPopUpButtonCell 菜单

我正在使用一个NSOutlineView有两列的。我dataSource为大纲视图提供了代表文件类型的自定义类的项目树(即,您使用 UTI 对其进行初始化)。第一列是文件类型的显示名称(例如,“源代码”、“Interface Builder NIB 文档”等)。第二列NSPopUpButtonCell应该允许用户为给定的文档类型选择一个处理程序(想想 Xcode 的“文件类型”首选项窗格,你就在那里)。

我可以NSMenu为树中的给定项目生成一个,填充基于 UTI 的启动服务数据库条目的选项,以及相关的应用程序图标等等。事实上,菜单本身非常好用,通过NSPopUpButtonCellWillPopUpNotification.

问题是,尽我所能尝试,当菜单没有弹出时,单元格总是包含以下两件事之一:空字符串或单元格的默认文本,前者如果-handlerName项目的结果(分配给列的属性)是非nil,否则为后者。

此外,我手动调用-selectItem:实例NSPopUpButtonCell,这似乎是错误的。相比之下,左边的列,它只是一个NSTextFieldCell,一切正常(尽管被允许,它所要做的就是从项目中读取值并呈现它)。

(免责声明:我在 Cocoa UI 方面还很新;我知道 Objective-C 和许多其他编程语言,但我没有大量构建 Mac OS X UI 的经验,所以要温柔)。

0 投票
1 回答
926 浏览

cocoa - 如何在启动时为 NSTreeController 设置默认选择?

的背景

我在我的 Cocoa 应用程序中建立了一个源列表(类似于 iTunes 等)。

  • 我有一个 NSOutlineView,其 Value 列绑定到 NSTreeController 的排列对象.name 键路径。

  • NSTreeController 访问核心数据存储中的 JGSourceListNode 实体。

  • 我有 JGSourceListNode 的三个子类 - JGProjectNode、JGGroupNode 和 JGFolderNode。

  • 我已将 NSTreeController 上的 selectedIndexPaths 绑定到我的 App Delegate 中名为 selectedIndexPaths 的 NSArray。

在启动时,我搜索组节点,如果在核心数据存储中找不到它们,我会创建它们:

我想要的是

当我启动应用程序时,我希望扩展两个顶级组并突出显示“未训练”,如下所示:

我的窗口 http://synapticmishap.co.uk/Window.jpeg

问题

我将以下代码放在applicationDidFinishLaunching:应用程序委托的方法中:

但是大纲视图似乎还没有准备好,所以这段代码什么也不做。

理想情况下,最终我想保存用户所做的最后选择并在重新启动时恢复它。

问题

我确信可以使用一些疯狂的 KVO 来观察 NSTreeController 或 NSOutlineView 何时被填充,然后展开项目并更改选择,但这感觉很笨拙,太像一个解决方法。

我将如何优雅地做到这一点?

0 投票
2 回答
803 浏览

cocoa - NSOutlineView 不重绘

我有一个带有复选框的 NSOutlineView。我将复选框状态绑定到具有键 shouldBeCopied 的节点项。在节点项中,我有 getter 和 setter,如下所示:

这里的想法是,如果检查父母,孩子也应该检查。我遇到的问题是,当我检查父级时,如果它们已经展开,它不会更新子级的视图。我可以理解它不应该被绑定更新,因为我实际上并没有改变值。但是 reloadData 不应该导致绑定重新获取值,从而调用-shouldBeCopied孩子吗?-setNeedsDisplay我已经尝试了一些其他的东西,例如-reloadItem:nil reloadChildren:YES但没有工作。我注意到当我切换到 xcode 然后再返回时显示会刷新,这就是我想要的,那么我如何让它表现得那样呢?

0 投票
0 回答
215 浏览

objective-c - 在不显示标题的情况下调整 NSOutlineView 中的列大小

我有一个包含两列的大纲视图。我想允许我的用户调整两列的大小,但如果不显示列标题似乎是不可能的。有人成功做到这一点吗?

0 投票
1 回答
585 浏览

cocoa - 为什么 [NSOutlineView clickedRow] 总是返回 -1?

我有一个相当行人不可编辑的NSOutlineView设置。在大纲视图的绑定中,我已将 Double Click Target 绑定设置为我的文件所有者 ( MyDocumentFWIW),选择器为outlineViewWasDoubleClicked

该方法存在并被调用,但是当我调用它时,-clickedRow它始终返回-1,而不是我双击触发该方法的行的行号。

_outlineView是一个 IBOutlet 并且我已经通过使用 for 方法验证了它是否正确连接,-selectedRow而不是-clickedRow(我宁愿使用-clickedRow它,因为用户选择一行似乎不直观,双击另一行用它做某事并使用他们选择的行触发方法。)

我现在最好的猜测是-clickedRow在我的方法触发之前该值已被清除,但我不知道在哪里或什么可能会吞噬它。

提前感谢您的帮助。