我对Cocoa - View-Based NSTableView, using one cell in multiple tables提出了类似的问题
makeViewWithIdentifier:owner:
“通常,标识符与Interface Builder中的外部NIB相关联,表格视图将自动使用提供的所有者实例化NIB。”
这似乎意味着您应该能够将NSTableCellView
存储在包含NSTableView
的笔尖的单独笔尖中。然而,在我的实验中,我只能获得包含在tableview中的单元格,我正在调用它。即,如果我将单元格剪切并粘贴到新的.xib文件中,则tableview将无法再找到它。我做错了什么,或者这实际上是不可能的,我在某种程度上误读了Apple的文档?
答案 0 :(得分:5)
使用- (void)registerNib:(NSNib *)nib forIdentifier:(NSString *)identifier
注册要与单元格标识符一起使用的笔尖。
如果它不起作用,您可能在加载tableView数据后注册nib。使用[tableView reloadData]
后记以确保它不是时间问题。
答案 1 :(得分:3)
我刚遇到这个问题,我认为当你使用专用的Nib来填充基于视图的表时,你不能使用 makeViewWithIdentifier:owner:。
问题与文件所有者(即视图控制器)有关。 makeViewWithIdentifier:owner:似乎与“self”一起用作简单自定义视图的所有者。
通常,如果您有自定义视图的单独nib和outlet,那么您也需要一个单独的视图控制器。否则,如果您的自定义视图有一个插座,并且该表显示了许多自定义视图,那么您从“自我”表格视图所有者引用哪个插座?
所以在我的测试中,我已经将AppDelegate作为Table View的委托/数据源。我有一个 CellView.xib 和 CellViewController.h / .m ,带有接口的插座。然后在我的 tableView:viewForTableColumn:row:委托方法中我有这个代码:
SSCellViewController *vc = [[SSCellViewController alloc] initWithNibName:@"CellView" bundle:nil];
return vc.view;
您丢失的是使用makeViewWithIdentifier:owner:自动执行的单元格重用。要自己实现这一点,您可能还需要处理管理您创建的许多视图控制器。
我可能仍然会遗漏一些东西,因为我经过多年的iOS工作后才开始进行OS X开发。