我正在尝试将一个 NSTableView 嵌套在我的 xib 中另一个基于 View 的 tableview 中。当我这样做时,出现以下构建错误(尝试编译 xib 时):
对象 ID 为 jRp-dg-jOe 的 NSTableColumn 实例未使用 ID 为 y8a-qz-ChK 的对象归档其子项 (NSTableCellView)
有没有人见过这个,或者知道如何解决它?
我假设我可以为 NSTableCellView 创建另一个 xib,并使用它连接到父 NSTableView
NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"MyCellContainingAnNSTableView"bundle:nil];
[parentTable registerNib:cellNib forIdentifier:@"SomeIdentifier"];
但这有点烦人......
最佳答案
好吧,似乎没有人对此有任何解决方案......
经过长时间的观察,Interface Builder 似乎无法归档嵌套的 NSTableView。我的解决方案是创建一个包含 NSTableCellView
并从原始 NSTableView
引用它的新 .xib
。方法如下:
- 在单独的
.xib
中创建一个新的 NSTableCellView。将其命名为SchemeCell.xib
- 在您的代码中添加一个
NSTableViewDelegate
,并将其设置为主(父)tableview 的委托(delegate)。 在方法中添加:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"SchemeCell" bundle:nil]; [self.schemeTableView registerNib:cellNib forIdentifier:@"SchemeCell"]; }); return [self.schemeTableView makeViewWithIdentifier:@"SchemeCell" owner:self]; }
然后你走吧!现在这样做的主要缺点是您不能再使用 Interface Builder 将项目从 SchemeCell
连接到父 NSTableView
(因为它们现在都在单独的 .xibs
,但这不是世界末日,因为您当然可以在代码中完成所有这些操作。
关于objective-c - xib中基于嵌套 View 的NSTableViews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370730/