基于视图的NSTableView视图控制器

时间:2012-09-04 12:25:04

标签: cocoa nstableview cocoa-bindings

我不确定我做得对不对,但这是我的问题:

我有一个基于视图的NSTableView使用绑定到数组控制器。

我需要在每一行上做一些自定义绘图,具体取决于所代表的对象以及在某些区域捕获点击所以为此我需要为每一行设置一个控制器并为我的自定义中的子视图设置出口细胞视图,但我不明白我是如何实现这一目标的。

如果我只是将一个对象添加到笔尖并与其建立连接,那么我无法分辨哪些视图正在被绘制(或已被点击)。

2 个答案:

答案 0 :(得分:1)

您必须实现委托方法:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

表视图使用它来获取给定单元格(列,行)的视图。 然后通过使用“makeViewWithIdentifier:owner:”,您可以获得具有给定标识符和给定所有者(视图控制器)的可重用单元。 最简单的方法是在Interface Builder中设计单元格,并为每个单元格设置不同的标识符。然后方法“makeViewWithIdentifier:owner”将自动为您创建给定标识符的视图。

答案 1 :(得分:-1)

我刚发现有人问过similar question并且答案也满足了我的需求,所以对于那些在这里结束的人来说,这就是我所做的:

  • 我将NSTableCellView控制器设为NSTableView的代表。

  • 在我的NSTableCellView子类中,我实现了所需的方法(drawRect:mouseUp:等等)并调用控制器中的相应方法。

  • 要访问控制器,我得到NSTableView,然后是它的代表:

    NSTableView *tableView = (NSTableView*)myView.superview.superview.superview;
    MyControllerClass *controller = (MyControllerClass*)tableView.delegate;
    [controller view:myView drawRect:dirtyRect]
    
  • 在控制器上,为了告诉发送事件的视图,我使用了他们的标识符。