- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用自定义单元格填充 NSTableView 的最佳方法是什么?
当我填充标准数据时,我总是使用 Cocoa 绑定(bind),并且在使用自定义单元格填充表时我总是使用数据源。我想知道是否有一种方法可以将这两个概念混合以实现最佳设计。
遗憾的是,使用 Xcode 3(因此,IBPlugins)不是一种选择。
最佳答案
我个人不会混合绑定(bind)数据和数据源。我只遇到过痛苦尝试这样做。不过,我确实有一些方法可能会对您有所帮助。
我能够做的一件事是在 IB 中设置一个自定义单元格类,它是 IB 知道的单元格之一的子类,然后覆盖您需要的任何内容以使其执行您想要的操作。但首先是一些背景,还有一些错过的尝试:
当绑定(bind)基于单元格的 NSTableViews 时,你通常在列本身而不是列内的单元格上设置绑定(bind)。如果您在表列中使用自定义 NSCell 子类,您会注意到像 value
这样的绑定(bind)。不再在列上可用,这与单元格是 NSTextFieldCell 时不同。我试图通过设置 value
来欺骗 IB将其绑定(bind)设置为 NSTextFieldCell,然后切换单元格——绑定(bind)仍然出现在绑定(bind)检查器中,但它总是在运行时崩溃并出现以下错误:[<NSTableColumn 0x10252e910> valueForUndefinedKey:]: this class is not key value coding-compliant for the key value.
这让我想到了对 IB 知道如何绑定(bind)到的单元格之一进行子类化的方法。我创建了 NSTextFieldCell 的子类,深入到表列中的“文本字段单元格 - 文本单元格”,然后在身份检查器中设置我的自定义子类。我能够确认绑定(bind)仍然有效并且 IB 仍然将其视为 NSTextFieldCell。从那里,我可以在我的自定义单元类中覆盖我想要的任何方法并获得自定义行为。我没有理由相信你不能用图像单元来做到这一点。自然,这是一种虚假的方法,但取决于自定义单元格的“自定义”程度,它可能胜过编写一堆自定义代码来连接数据源。
我在进一步的实验中发现,这是一个“IB 问题”,而不是真正的 NSTableView/绑定(bind)问题。还有另一种很好的解决方法。
假设您想使用自定义单元格,并且想将其绑定(bind)到某个任意模型对象。你有你的 NSTableColumn 值绑定(bind)绑定(bind)到一个 NSArrayController,它提供一个自定义模型对象列表,每个对象都有一个属性,称之为 dataForCustomCell
返回任何自定义单元格需要做的事情。您将设置一个 TextFieldCell 列(就像 IB 中的默认值),然后绑定(bind) value
NSTableColumn 绑定(bind)到数组 Controller > arrangedObjects
并输入模型 key 路径dataForCustomCell
.此时,假设dataForCustomCell
返回的对象实现 NSCopying(如果它没有你的应用程序会崩溃,但这并不是真正相关的)如果你运行你的应用程序你会看到 NSTextFieldCell 会调用 - (NSString*)description
在 dataForCustomCell
返回的对象上并将该文本放入单元格中。
现在是有趣的部分:在 -awakeFromNib
时间在您拥有的对象(NSView、NSViewController 等)中,替换 dataCell(如果您愿意,还可以替换 headerCell),如下所示:
- (void)awakeFromNib
{
[super awakeFromNib];
// Assuming you've got your NSTableView plugged into an IBOutlet property called table
NSTableColumn* col = [[self.table tableColumns] objectAtIndex:0];
col.dataCell = [[[MYCustomCell alloc] init] autorelease];
}
-(void)setObjectValue:
并且您将在运行时收到来自绑定(bind)机制的调用,插入来自
dataForCustomCell
的对象。对应于表格当前绘制行的模型对象上的属性。 (您还会收到一个为每个单元格传入 nil 的调用,但忽略它或将其传递给 super 似乎是安全的。)
-setObjectValue:
的实现中向下钻取并扇出多个值。如果需要。
关于cocoa - NSTableView 中的自定义单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842042/
非常基本的场景: 我的 Nib 上有一个 NSTableView,有一个指向它的 socket 。我的应用程序委托(delegate)中有以下内容: - (void)applicationDidFin
目前,当我从 NSTableView 中拖出一行时,它是该行中的半透明文本。相反,我想显示代表这一行的半透明图像。 我怎样才能做到这一点? 最佳答案 我建议覆盖 -[NSTableView dragI
我正在使用 NSTableView 来显示我的数据。我想删除默认情况下采用蓝色的选定行的颜色。我可以将其设置为透明颜色吗?可能吗? 编辑: 如何去掉这个蓝色边框?我已将Clear color 设置为表
我正在尝试在 NSTableView 内显示 NSTableView。这是一个类似 iTunes 的专辑/轨道 View 。所以有一个包含 10 张专辑的列表,每个专辑都有一些轨道。我想在外部表格 V
我有一个基于 View 的 NSTableView,其内容绑定(bind)到数组 Controller 。我使用 objectValue.title 绑定(bind)一个特定的文本字段。这工作正常。我
具有单列的基于 View 的 NSTableView。每个“单元格”包含多个 NSTextField、一个 NSImageView 和一个 NSButton,所有这些都绑定(bind)到表格单元格 V
如果我的理解没有错的话,cell-based NSTableView 和 view-based NSTableView 是同一类型的实例。那么,cpu是如何区分cell-based和view-base
我在 10.8 上运行基于 View 的 NSTableView 时遇到问题(目标是 10.7,但我认为这不相关)。 我正在使用 NSTableView,并通过绑定(bind)获取自定义 NSTabl
我有一个有 4 列的 NSTableView。我还为每一行设置了自定义背景颜色。唯一的问题是我有这些丑陋的空白区域,网格线会同时出现在水平轴和垂直轴上。我在 IB 中都取消了检查,但它们仍然出现。如何
我有一个基于 View 的 NSTableView,每一行都必须生成一些需要时间的图像。这些是在后台 NSoperationQueue 上完成的,并在请求图像时启动(通过绑定(bind))。 当一行滚
我的NSTableCellView是子类,并存储指向对象的指针。我想访问该指针,而我唯一获得的信息就是row编号为NSInteger。 如何使用给定的NSTableCellView从我的tableVi
我需要创建一个包含 3 列的 NSTableView,这些列必须适合像这样的空间 20% 60% 20%。我在界面生成器中设置了约束但没有成功。结果总是一样的。显示了 3 列,但大小与 IB 中的相同
我已经尝试了其他帖子中建议选项的多种组合,但我似乎无法使用基于单元格的 NSTableView 填充不可编辑的 NSTextFieldCell 来选择单元格而不是行。 我已经尝试过: [[co
我在区分两个 NSTableView 时遇到问题,需要一些帮助。 我尝试过这些方法: 1. - (void)tableViewSelectionDidChange:(NSNotification *)
我将 NSTableView 绑定(bind)到 NSArrayController。由于某种原因,我根本无法对列进行排序。有些列甚至不显示排序方向箭头。有些确实显示了它,但单击它只是切换箭头方向,它
我在 TableView 中第一行的索引是“0”,这是正确的吗? 如果是,我怎样才能使 TableView 中第一行的索引变为“1”? 这是需要的,因为我的 DataSourse 从“1”开始,我需要
我编写了一个向 NSTableView 添加新行的方法。它添加了新行,但有空,没有文本。代码如下: AppDelegate.h #import @interface AppDelegate : NS
建立委托(delegate)和数据源连接后,我有以下 Controller : #import @interface KextTable : NSObject { @private NSA
我在基于 View 的 NSTableView 中对 NSTableRowView 进行了子类化,以将选择颜色更改为浅蓝色,而不是默认颜色。 不幸的是,当我选择该行时,自定义单元格内的标签和文本字段的
我有一个包含 3 个单元格的 NSTableView。我已经使用以下代码调整了该表格 View 以显示分隔符: [self.tableView setGridColor:[NSColor ligh
我是一名优秀的程序员,十分优秀!