问题标签 [nstablerowview]

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 回答
291 浏览

swift - NSTableRowView 拖放时的奇怪行为(不断在视图层次结构中插入 NSView)

我注意到我的应用程序中有奇怪的行为,但找不到解决方法:我有NSOutlineView和自定义NSTableRowView并支持拖放。

当我首先在大纲视图上拖动项目(例如文件)时,它会绘制正确的突出显示(我已经覆盖drawDraggingDestinationFeedbackInRect),但是在第二次拖动时,我有这个蓝色突出显示,如果我调试视图层次结构,我可以看到NSView被添加到行.

我附上了一个小动画,它准确地显示了发生了什么(我还添加了具有相同NSTableRowView的NSTableView):

顶部:NSOutlineView

底部:NSTableView

在此处输入图像描述

视图层次结构(对于 NSOutlineView):

在此处输入图像描述

这是我的NSTableRowView代码

以下是NSOutlineView的数据源和委托方法:

我试过的:

  1. 继承 NSOutlineView 并覆盖 AcceptFirstResponder

  2. 覆盖背景样式

  3. 尝试了不同的 selectionHighlightStyle 的
  4. 使用 NSTableViewDraggingDestinationFeedbackStyleNone
0 投票
1 回答
234 浏览

objective-c - NSTableView:创建“重叠”行

目标

我的应用程序中有一个 NSTableView,我想绘制“重叠”行以创建类似于 Automator.app 中的“连接”效果:

自动化应用程序的屏幕截图


我正在尝试什么

我正在考虑的方法是使用 NSTableView 的-(NSRect)frameOfCellAtColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex方法在第一行之后增加所有行的 Y 原点。我的 tableView 是基于视图的,它不使用自动布局。

我的问题是:这是实现这种效果的正确方法吗?让 tableView 绘制具有重叠帧的行似乎是“危险的”,我不知道这是否会导致 tableView 底部出现一堆额外的空白空间(因为 tableView 不会重叠在计算其整体高度时考虑框架;它只使用每行的 rowHeight 值的总和。)

有谁知道是否有不同的规范方式来实现 Automator tableView 的效果?

0 投票
1 回答
1252 浏览

cocoa - 如何在 Interface Builder 中创建 NSTableRowView 原型

我有一个基于视图的NSTableView,我正在尝试自定义某些行的外观。

我知道我需要实现标题中提到的委托方法;但是我不确定该怎么做。

文档说:

您可以使用委托方法 tableView:rowViewForRow: 来自定义行视图。您通常使用 Interface Builder 来设计和布局表中的 NSTableRowView 原型行。与原型单元一样,原型行在运行时以编程方式检索。NSTableRowView 子类的实现是完全可选的。

但是,与单元格不同的是,界面生成器中没有NSTableRowView类,也不清楚如何设置“原型”行视图。

我正在尝试这样的事情(Swift 3):

我有类似的代码适用于单元格- 即-tableView:viewForTableColumn:row:.

0 投票
2 回答
104 浏览

nstableview - 新 NSTableView 组行的通知

当我的行视图变成组行时,或者更具体地说,当它变成卡在 NSTableview 顶部的组行时,我希望改变它的外观。

我想知道是否有可以检查的通知或某些属性。理想情况下,我想做某种动画,因为它从一个视图到下一个视图的顶部范围内。

我正在考虑跟踪与剪辑视图/滚动视图相关的行视图坐标...您会采用这种方法吗?

有什么建议么?

0 投票
1 回答
277 浏览

objective-c - 如何实现可滑动的 NSTableView 单元格?

NSTableViewRowAction 的简单示例?向左/向右滚动以删除或其他操作。

0 投票
1 回答
74 浏览

nstableview - NSTableView 检测滚动的行

我有一个基于视图的 NSTableView 并且每一行都必须生成一些需要时间的图像。这些是在后台 NSoperationQueue 上完成的,并在发出图像请求时启动(通过绑定)。

当一行滚出屏幕时,如果 NSOperation 仍处于挂起状态,我希望能够取消它,但我需要检测一行何时不再可见。我应该在我的 CustomTableRowView、CustomTableCellView 或其他东西上寻找 delloc 吗?

我想我需要相反的 tableView:willDisplayCell:forTableColumn:row:

某种 tableView:willHideCell:forTableColumn:row:

Apple 的 TableView Playground 有评论:

// 如果我们想稍后支持取消已滚动到屏幕外且不再需要的操作,我们将不得不使用 NSBlockOperation 跟踪块。这将作为练习留给用户。

我可以取消操作,但我不确定如何检测何时滚动一行。

0 投票
3 回答
114 浏览

swift - 无法覆盖 NSTableViewRow draw() 行为以在 NSOutlineView 中透明

我有一个带有自定义 NSTableViewRows 的 NSOutlineView。

我已经覆盖了 NSTableViewRow 上的 draw 方法:

...所以它不应该画任何东西。但是,行有时是纯黑色,有时是清晰的。我无法确定何时的模式。

如果我确实在绘图函数中放置了一些东西,它会在它发生时绘制黑色,我似乎无法在绘图函数中清除黑色,除了填充纯色。

为了清除我已经尝试过:

如果我查看调试视图层次结构,我可以清楚地看到 NSTableViewRow 本身是黑色的。

我已经尝试设置 wantLayer 并在绘图函数中设置图层的背景颜色,但这没有效果。

谁能解释这个黑色填充物可能来自哪里以及它生活在哪里!

我设法确保它不存在的唯一方法是使用:

...这表明 NSTableViewRow 正在做一些奇怪的事情。

0 投票
1 回答
95 浏览

nstablerowview - 如何像 Xcode IB 对象选择器一样实现 NSTableViewRowlView

我正在尝试实现一个NSTableView看起来类似于 Xcode IB 对象选择器(右下面板)的。As shown below when a row is selected a full width horizo​​ntal line is draw above and below the selected row.

我已经成功创建了一个子类,NSTableRowView并使用了 isNextRowSelected 属性来确定是否绘制全宽分隔符,这几乎可以工作。

问题是所选行上方的行没有被重绘,除非您碰巧选择了一行,然后立即选择了它下方的行。

如何有效地让 NSTableView 每次都重绘所选行上方的行?

在此处输入图像描述

这是我选择单行时的实现 在此处输入图像描述

如果现在选择了紧随其后的行 - 这就是我想要的。 在此处输入图像描述

在阅读了其他几篇文章后,我尝试添加代码以重绘前一行。这似乎没有效果。

这也不是。

似乎很奇怪,这些都没有触发重绘行 - 我在这里遗漏了什么!

编辑:好的,我发现一些似乎可以正常工作的东西 - 在 XCode tableView 中不存在的取消选择的行上方的行的重绘中仍然存在明显的滞后。

然后简单地lastSelectedRow = tableView.selectedRowtableViewSelectionDidChange(:)方法中设置变量的值。

我认为可能需要对 tableView 进行子类化,以确保在同一更新周期中重绘两行。

0 投票
0 回答
94 浏览

macos - 没有使用 rowViewForRow 创建的行对象

我想使用 rowViewForRow 来检查背景必须是什么颜色。我有一个包含多个数据的结构数组,它是一个排名。当有第一个位置时,背景必须变成蓝色。如果不是,背景必须是白色的。但是当我运行 rowViewForRow 时,该行没有被创建并且为零。在调试模式下,我可以看到 stuct 数组中的每条记录都被传递和循环。

我也尝试使用 tableview.makeView 但结果相同。新行上有一个零。

0 投票
0 回答
23 浏览

swift - 在基于视图的 NSTableView 上更改选择颜色并恢复原始多色行

我有一个 NSTableView ,其中每一行都有几列,这些列将具有不同的颜色,由 viewFor 方法确定。

当在基于视图的 NSTableView 中选择一行时,我想为选择栏中的背景和前景使用一组自定义颜色。

对于 isEmphasized = true 的行,背景为蓝色,前景文本为黄色。对于 isEmphasized = false 的行,背景为浅灰色,前景文本为黑色。

要更改选择栏颜色,我将 NSTableRowView 子类化

当我选择不同的行时,不再选择的前一行将保持前景文本颜色(所有列都是黄色或黑色),就像它被选中时一样。列不再用颜色编码。

当不再选择行时,如何恢复行上的颜色编码?

当 tableview 最初显示时,每个颜色编码的行都是调用 func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

如何从 selectionIndexesForProposedSelection 调用 viewFor?

有关问题的演示,https://youtu.be/YESHvm8rP_M