问题标签 [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.
cocoa - 如何使 NSOutlineView 缩进多列?
使NSOutlineView缩进多列的最简单或推荐的方法是什么?默认情况下,它只缩进大纲列;据我所知,没有内置支持使其缩进其他列。
我有一个 NSOutlineView,它显示了两组分层数据之间的比较。为了视觉吸引力,如果大纲列中的某些项目是缩进的,我想将另一列中同一行上的项目缩进相同的缩进量。(还有第三列显示比较两个项目的结果,此列不应该缩进。)
这只能通过继承 NSOutlineView 来实现吗?在子类中需要覆盖什么?或者有没有更简单的方法让它缩进多列?
objective-c - 异构 NSTreeController
我有一个 NSTreeController(向 NSOutlineView 提供内容)。我希望顶级对象属于一个类,而所有其他对象(因此,任何级别的孩子)属于另一个。解决这个问题的最佳方法是什么?
我想我需要以某种方式改变至少add
, addChild
,insert
和的行为insertChild
。不过,我希望找到一种简单的方法来仅在一个位置解决此问题,而不是更改四种不同的方法。
cocoa - 展开从数据源加载数据的 NSOutlineView 的所有项
首先,我是可可开发的新手,所以我想我可能试图以错误的方式做到这一点,但这里是:
我有一个NSOutlineView
从实现中加载数据的方法NSOutlineViewDataSource
。我希望所有项目在加载后展开,但我似乎找不到在数据加载完成时触发的事件,所以我可以向[outlineView expandItem: nil expandChildren: YES]
它发送一个。
我查看了NSOutlineViewDelegate
协议,但找不到适合此通话的地点。解决这个问题的最佳方法是什么?
objective-c - 实现一个静态的 NSOutlineView
我很难拼凑足够多的知识片段来实现一个 NSOutlineView,它具有在 NSArray 中定义的静态、永不改变的结构。这个链接很棒,但它并没有帮助我掌握子菜单。我认为它们只是嵌套的 NSArrays,但我不清楚。
假设我们在 NSArray 中有一个 NSArray,定义为
文本在 outlineView:objectValueForTableColumn:byItem: 中定义。
结果是“1”、“(”(可扩展)和“3”。NSLog 显示以“(”开头的数组,因此是第二项。扩展它会由于“超出界限”而导致崩溃。我尝试使用parentForItem:但无法弄清楚将结果与什么进行比较。
我错过了什么?
objective-c - NSOutlineViewDelegate - 需要类似 didFinishEditing 的东西
NSOutlineViewDelegate
hasoutlineView:shouldEditTableColumn:item:
在编辑单元格之前被调用。我需要在用户完成编辑单元格后调用一个类似的方法(以触发一些计算)。我应该在哪里寻找这个事件?
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 的经验,所以要温柔)。
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 何时被填充,然后展开项目并更改选择,但这感觉很笨拙,太像一个解决方法。
我将如何优雅地做到这一点?
cocoa - NSOutlineView 不重绘
我有一个带有复选框的 NSOutlineView。我将复选框状态绑定到具有键 shouldBeCopied 的节点项。在节点项中,我有 getter 和 setter,如下所示:
这里的想法是,如果检查父母,孩子也应该检查。我遇到的问题是,当我检查父级时,如果它们已经展开,它不会更新子级的视图。我可以理解它不应该被绑定更新,因为我实际上并没有改变值。但是 reloadData 不应该导致绑定重新获取值,从而调用-shouldBeCopied
孩子吗?-setNeedsDisplay
我已经尝试了一些其他的东西,例如-reloadItem:nil reloadChildren:YES
但没有工作。我注意到当我切换到 xcode 然后再返回时显示会刷新,这就是我想要的,那么我如何让它表现得那样呢?
objective-c - 在不显示标题的情况下调整 NSOutlineView 中的列大小
我有一个包含两列的大纲视图。我想允许我的用户调整两列的大小,但如果不显示列标题似乎是不可能的。有人成功做到这一点吗?
cocoa - 为什么 [NSOutlineView clickedRow] 总是返回 -1?
我有一个相当行人不可编辑的NSOutlineView
设置。在大纲视图的绑定中,我已将 Double Click Target 绑定设置为我的文件所有者 ( MyDocument
FWIW),选择器为outlineViewWasDoubleClicked
该方法存在并被调用,但是当我调用它时,-clickedRow
它始终返回-1,而不是我双击触发该方法的行的行号。
我_outlineView
是一个 IBOutlet 并且我已经通过使用 for 方法验证了它是否正确连接,-selectedRow
而不是-clickedRow
(我宁愿使用-clickedRow
它,因为用户选择一行似乎不直观,双击另一行用它做某事并使用他们选择的行触发方法。)
我现在最好的猜测是-clickedRow
在我的方法触发之前该值已被清除,但我不知道在哪里或什么可能会吞噬它。
提前感谢您的帮助。