如何检测NSTableView中的行数是否已更改?

时间:2008-11-20 03:19:18

标签: cocoa

我有一个自定义的NSTableView子类,它绑定到一个异步更新的数据源(NSArray)。将项目添加到数组时,行会自动添加到tableview中。真棒!

我的问题是:如何检测到这种魔法已经发生,以便我可以执行与自定义tableview显示相关的其他一些任务?我可以在子类中覆盖一个方法,在更新tableview时会调用它吗?

2 个答案:

答案 0 :(得分:5)

您不需要子类化NSTableView来根据行数更改其高度。在您的控制器中,只需使用KVO监视数据数组,并在添加或删除行时调整tableview的scrollview的帧大小(您可以使用enclosingScrollView找到它)。我之前使用过这种技术,效果很好。您可以使用tableview的rowHeightintercellSpacing方法来计算帧的高度。

答案 1 :(得分:2)

在此解决方案上看了几天的高低。它就像一个魅力,谢谢!以下是我的代码示例供其他人使用:


// tv = NSTableView
// view = NSView

int height = ([tv rowHeight] + [tv intercellSpacing].height)  * [itemNodes count];

NSScrollView *sv = [tv enclosingScrollView];

NSRect svFrame = [sv frame];
svFrame.size.height = height;
[sv setFrame:svFrame];

NSRect viewFrame = [view frame];
viewFrame.size.height = height;
[view setFrame:viewFrame];