我不确定我是否做对了,但这是我的问题:
我有一个基于视图的 NSTableView 使用绑定到数组控制器。
我需要在每一行上做一些自定义绘图,这取决于表示的对象以及在某些区域捕获点击,所以为此我需要为每一行设置一个控制器并在我的自定义单元格视图中为子视图设置出口,但我不明白我怎么能做到这一点。
如果我只是将一个对象添加到笔尖并与之建立连接,那么我无法判断哪些视图正在被绘制(或已被单击)。
我不确定我是否做对了,但这是我的问题:
我有一个基于视图的 NSTableView 使用绑定到数组控制器。
我需要在每一行上做一些自定义绘图,这取决于表示的对象以及在某些区域捕获点击,所以为此我需要为每一行设置一个控制器并在我的自定义单元格视图中为子视图设置出口,但我不明白我怎么能做到这一点。
如果我只是将一个对象添加到笔尖并与之建立连接,那么我无法判断哪些视图正在被绘制(或已被单击)。
您必须实现委托方法:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
表格视图使用它来获取给定单元格(列、行)的视图。然后通过使用“makeViewWithIdentifier:owner:”,您可以获得具有给定标识符和给定所有者(视图控制器)的可重用单元格。最简单的方法是在 Interface Builder 中设计您的单元格,并为每个单元格设置不同的标识符。然后方法“makeViewWithIdentifier:owner”会自动为你创建一个给定标识符的视图。
我刚刚发现有人问了一个类似的问题,并且它的答案也满足了我的需求,所以对于最终来到这里的任何人,这就是我所做的:
我将我的NSTableCellView
控制器设置为NSTableView
.
在我的NSTableCellView
子类中,我实现了所需的方法(drawRect:
等等mouseUp:
)并在控制器中调用相应的方法。
要访问控制器,我得到它NSTableView
,然后是它的委托,如下所示:
NSTableView *tableView = (NSTableView*)myView.superview.superview.superview;
MyControllerClass *controller = (MyControllerClass*)tableView.delegate;
[controller view:myView drawRect:dirtyRect]
在控制器上,为了告诉哪个视图正在发送事件,我使用它们的标识符。