objective-c - xib中基于嵌套 View 的NSTableViews

标签 objective-c macos cocoa nstableview

我正在尝试将一个 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/

相关文章:

objective-c - Core Data 和 NSTableView 将内容显示为标题

objective-c - 用于自定义 NSWindow 或 NSView 的 native OSX Lion 调整光标大小

ios - 自定义 UINavigationController UIToolbar 子类

ios - - (void)chatDidReceiveMessage :(QBChatMessage *)message not working

java - 在 Mac OSX 下开发 CLDC 或 J2ME 应用程序?

objective-c - NSScrollView:它保留-documentView吗?

ios - 在 Objective C 中快速从 NSURL 下载到 NSDATA

objective-c - 在 objective-c 中设置自定义字体

objective-c - 脚本网桥:组合SBElementArrays

objective-c - 使用 root 权限部署应用程序