2008-11-20 47 views
2

我有一个自定义NSTableView子类绑定到一个数据源(NSArray)异步更新。当项目添加到数组时,行会自动添加到tableview中。真棒!如何检测NSTableView中的行数已更改?

我的问题是:我如何检测到这个魔术发生了,以便我可以执行一些与我的自定义tableview显示相关的其他任务?有没有一种方法,我可以在我的子类中重写将更新tableview时将被调用?

+0

你能解释一下你的子类需要做什么吗?通常当你操纵一个tableview时,你会使用它的委托,一个自定义的单元格或表格列,或者重写一个tableview的绘图方法。我很难想出一个与你所问的相关的例子。 – 2008-11-20 03:33:10

+0

够公平的。我想根据它包含的行数来调整tableview的高度。当它达到一定的限制时(假设有10行),我将允许它滚动,但对于1-9行,我只是希望它在屏幕上长高。 – 2008-11-20 03:43:34

回答

5

您不需要根据行数继承NSTableView以更改其高度。在您的控制器中,只需使用KVO监视数据阵列,并在添加或删除行时调整tableview滚动视图的框架大小(您可以使用enclosingScrollView找到它)。我之前使用过这种技术,它运行良好。您可以使用tableview的rowHeightintercellSpacing方法来计算帧的高度。

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]; 
相关问题