问题标签 [nsbrowser]

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 投票
0 回答
178 浏览

macos - 如何在 NSBrowser 中设置自定义 NSMatrix

我正在尝试为 NSBrowser 自定义背景颜色。为此,我尝试子类化 NSMatrix,使用 setMatrixClass: 将新类设置为列的矩阵类,然后以某种方式自定义矩阵,可能使用 drawRect:。

我可以使用断点验证 NSBrowser 将自定义类设置为它的 matrixClass。但是,矩阵类中没有断点被命中(我已经覆盖了所有 4 个构造函数,drawRect、drawLayer 和 awakeFromNib 作为测试)。什么都没有发生,就像我的 NSBrowser 忽略了 matrixClass。

我尝试将 NSBrowser 的矩阵类设置为 NSApplication 只是为了看看是否会发生任何事情。再一次,没有结果。当然这应该导致某种崩溃?setMatrixClass: 是否有效?

0 投票
1 回答
206 浏览

objective-c - NSBrowser,带有 OS X 10.8+ 中的 Finder 等部分

我有一个小问题——实际上——对我来说是一个更大的问题。我想使用 NSBrowser 并对每列中的行进行分组。这些组至​​少应由一行或一个标题分隔。相当于 OS X 10.8+ 中的查找器,如果您切换到带有行的视图并按种类或程序排序。顺便说一句,NSTableView 有我需要的一切,但我不能告诉 NSBrowser 使用 NSTableView 实例而不是 NSMatrix。

有谁知道我如何告诉 NSBrowser 对行项进行分组?

0 投票
0 回答
402 浏览

cocoa - 具有异步数据的 NSBrowser / NSTreeController

我有一个 NSBrowser 需要显示来自 REST API 的数据。有时此 API 需要一段时间才能返回结果,因此最好在后台处理网络流量(延迟获取)。有时需要刷新子树以反映服务器端的更改。

我尝试了两种不同的方法:

  1. 使用 NSBrowserDelegate。当 [browserDelegate browser:child:ofItem:] 或类似函数最终请求尚未加载的数据时,我返回 0 计数并启动后台处理。当数据可用时,我重新加载了列(效率不高,随着新数据的进入,用户的选择会变得混乱)。
  2. 使用 NSTreeController。我使用阻塞/同步方法让它工作得很好。但是,每当我更新模型时,NSBrowser 都会重置树并将选择向上移动到父级。我试过 [obj mutableArrayValueForKey] 方法。我试过 [treecontroller insertObject:atArrangedObjectIndexPath:] 方法。我已经切换了“保留选择”标志。我切换了“插入时选择”。无论我做什么,NSBrowser 都不想只干净地更新相关的子树。

底线:将数据异步加载到 NSBrowser 的最佳实践是什么?

0 投票
1 回答
128 浏览

cocoa - 在通过核心数据加载文件后,NSBrowser 不会从 NSTreeController 重新填充子项

我有一个基于核心数据的文档支持的应用程序,大量使用可可绑定。我正在使用 NSTreeController 来填充 NSBrowser。主要实体有一组孩子,可通过称为“孩子”的关系访问。添加孩子并在 NSBrowser 中显示它们没有问题。但是,在我保存文档并重新打开它之后,浏览器中只显示主要实体,而不是它们的子实体。我已经通过检查文件验证了孩子们与主要实体的正确关系(和反向)一起被保存。有没有其他人见过这个?是否有一些我可能遗漏的明显绑定/设置?

0 投票
2 回答
285 浏览

cocoa - NSBrowser 图像未显示在单元格中

我正在使用 NSBrowser 视图在查找器类型应用程序中显示文件和文件夹列表。我正在为 NSBrowser 使用新的 Item Base Api。

问题是当我尝试在willDisplayCell方法中设置图像时。视图中不显示任何内容。

代码:

Apple SimpleCocoaBrowser 示例

0 投票
1 回答
136 浏览

objective-c - 开始编辑 NSBrowser 的第一列

AppKitNSBrowser似乎有一个错误,即该方法*/ - (void)editItemAtIndexPath:(NSIndexPath *)indexPath withEvent:(NSEvent *)theEvent select:(BOOL)select不适用于浏览器中的第一列。如果 indexPath 指向第一列中的项目,则不会发生任何事情。在http://www.cocoabuilder.com/archive/cocoa/327335-nsbrowser-edititematindexpath-withevent-select.html还有另一个证据。

我一直在研究解决该错误的方法。有关代码,请参阅我的答案。

0 投票
1 回答
147 浏览

macos - 如何使用 NSBrowserDelegate 方法来表示数据树

我试图NSBrowser在 OS X 10.11 上表示 JSON 字典。我有一个字典,其中包含字符串值、字符串值数组或相同字典的成员。

func rootItemForBrowser(browser: NSBrowser) -> AnyObject?我提供我的字典。

func browser(browser: NSBrowser, numberOfChildrenOfItem item: AnyObject?) -> Int我返回子数组或字典中的对象计数。

我对如何使用感到困惑func browser(browser: NSBrowser, child index: Int, ofItem item: AnyObject?) -> AnyObject。这里的返回值最终是其中一个成员的字符串值,这是获取更多数据的关键。但是当我选择这个孩子时,我只有一个父字符串可以使用。我需要到目前为止用户选择的整个路径来实际实现字典的遍历。

我试过查看的path()方法,NSBrowser但这会导致这些委托方法中的无限循环。我查看 Finder 之类的应用程序,并对它们如何实现我想要的路径感到好奇。

0 投票
0 回答
111 浏览

cocoa - NSBrowser 中的上下文菜单

右键单击NSBrowser视图中的项目时,选择不会改变。相反,单击的项目会获得一个框架并打开一个上下文菜单。选定的项目和右键单击的项目是两个不同的东西。

在Finder(浏览器视图)中,上下文菜单中的操作对用户右键单击的项目进行操作,这是我所期望的。如果我对自定义控件执行相同NSBrowser操作,则会将操作应用于所选项目。

我附加了一个空NSMenuNSBrowser.menu获取服务菜单。从 查询时,有NSBrowser's clickedRow/clickedColumn属性会产生有效值[NSMenuDelegate menuWillOpen],但这对系统生成的 Services 菜单项没有帮助。

如何使上下文菜单对右键单击的项目进行操作?

编辑 2017-10-29

我将 NSBrowser 子类化为拖放支持。这就是添加上下文菜单的方式。它是空NSMenu的,会自动添加服务菜单。

0 投票
0 回答
162 浏览

objective-c - 使 NSBrowser 在更新时可用

我有一个NSBrowser显示 2 列数据,这些数据是在我的应用程序运行时在其他几个线程上计算的。我要解决的问题是允许用户在数据仍在进入时与浏览器交互。现在,当后台线程指示要显示新行时,我调用-[NSBrowser reloadColumn:0]. 当用户只是查看第 0 列中的数据时,此方法有效。但是,如果他们尝试选择第 0 列中的项目,应用程序调用 时,它将立即取消选择reloadColumn:0。数据通常以每秒数百行的形式出现。

作为一种解决方法,我尝试在调用之前获取当前选择reloadColumn:0,然后立即重置它。这会根据需要保持选择,但如果用户将选择滚动到视图之外,则一旦重新加载列,滚动位置就会弹回以包括选定的行。尝试使用该selectionIndexPath属性具有相同的效果。

所以看来我必须选择:

  1. 用户的选择每隔几秒就会消失
  2. 不允许用户将选择滚动到屏幕外

这些都不是很有用。我也尝试过-[NSBrowser reloadDataForRowIndexes:inColumn:仅调用“重新加载”(或实际加载)新行,但这显然不会加载尚未加载的行。基本上,加载第一行后,不再显示其他行。

我还尝试调用-loadedCellAtRow:Column:每个新创建的行,它也不会导致之前未加载的任何内容被加载。

有没有办法让这个工作不会惹恼用户?

对于它的价值,我NSBrowserDelegate在我的应用程序中实现了以下方法:

如果实现其他委托方法来解决这个问题是有意义的,我很想知道这一点。

0 投票
1 回答
222 浏览

swift - NSBrowser 快速拖放

我正在尝试使用 NSBrowser 控件在 swift 4 Macos 应用程序中进行拖放操作。我目前拥有的代码如下所示:

我看到的是前两个函数被调用 [canDragRowsWith 和 writeRowswith],并且 setString 命令返回 true,所以看起来好像值已保存到粘贴板。

但是其他两个函数没有被调用。因此,虽然我可以看到 NSBrowser 中的行被拖动,但看起来控件没有注册以接受放置。我还在 viewDidLoad 函数中添加了这个

有谁知道我错过了什么?有没有人有一个他们愿意分享的使用 NSBrowser 的快速 3/4 拖放示例?

谢谢