8

我有一个与Cocoa - View-Based NSTableView 类似的问题,在多个表格中使用一个单元格,由 Apple 自己的文档放大 makeViewWithIdentifier:owner:

“通常标识符与 Interface Builder 中的外部 NIB 相关联,并且表视图将使用提供的所有者自动实例化 NIB。”

这似乎意味着您应该能够将.NSTableCellView与包含NSTableView. 但是,在我的实验中,我只能获得包含在我调用它的 tableview 中的单元格。即,如果我将单元格剪切并粘贴到新的 .xib 文件中,则 tableview 将无法再找到它。我做错了什么,或者这实际上是不可能的,我在某种程度上误读了 Apple 的文档?

4

2 回答 2

5

用于- (void)registerNib:(NSNib *)nib forIdentifier:(NSString *)identifier注册要与单元标识符一起使用的笔尖。

如果它不起作用,您可能是在加载 tableView 数据后注册 nib。使用[tableView reloadData]后记来确保这不是时间问题。

于 2012-10-28T23:59:17.847 回答
3

我刚刚遇到了这个问题,我认为你不能使用makeViewWithIdentifier:owner:当你使用专用的 Nib 来填充基于视图的表时。

问题与文件所有者(即视图控制器)有关。makeViewWithIdentifier:owner:似乎打算与“self”一起用作简单自定义视图的所有者。

通常,如果您有一个带有插座的自定义视图的单独笔尖,您也将需要一个单独的视图控制器。否则,如果您的自定义视图有一个插座并且表格显示了许多自定义视图,那么您从“自我”表格视图所有者那里指的是哪个插座?

所以在我的测试中,我将 AppDelegate 作为表视图的委托/数据源。我有一个CellView.xibCellViewController.h/.m与接口的插座。然后在我的tableView:viewForTableColumn:row:委托方法中,我有以下代码:

SSCellViewController *vc = [[SSCellViewController alloc] initWithNibName:@"CellView" bundle:nil];
return vc.view;

您失去的是使用 makeViewWithIdentifier:owner: 自动发生的单元重用。要自己实现它,您可能还必须管理您创建的许多视图控制器。

我可能仍然缺少一些东西,因为我在多年只做 iOS 工作之后才开始进行 OS X 开发。

于 2012-09-26T18:59:04.573 回答