我有一个自定义的NSTableView子类,它绑定到一个异步更新的数据源(NSArray)。将项目添加到数组时,行会自动添加到tableview中。真棒!
我的问题是:如何检测到这种魔法已经发生,以便我可以执行与自定义tableview显示相关的其他一些任务?我可以在子类中覆盖一个方法,在更新tableview时会调用它吗?
答案 0 :(得分:5)
您不需要子类化NSTableView来根据行数更改其高度。在您的控制器中,只需使用KVO监视数据数组,并在添加或删除行时调整tableview的scrollview的帧大小(您可以使用enclosingScrollView
找到它)。我之前使用过这种技术,效果很好。您可以使用tableview的rowHeight
和intercellSpacing
方法来计算帧的高度。
答案 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];