Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何检测NSTableView中的行数已更改?_Cocoa - Fatal编程技术网

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

Cocoa 如何检测NSTableView中的行数已更改?,cocoa,Cocoa,我有一个自定义的NSTableView子类,它绑定到一个异步更新的数据源(NSArray)。将项添加到数组时,行将自动添加到tableview。太棒了 我的问题是:我怎样才能检测到这种神奇的情况发生了,以便我能够执行与自定义tableview的显示相关的其他任务?在更新tableview时将调用的子类中是否有可以重写的方法?您不需要子类化NSTableView来根据行数更改其高度。在控制器中,添加或删除行时,只需使用KVO监控数据阵列,并调整tableview滚动视图的帧大小(您可以使用Encl

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


我的问题是:我怎样才能检测到这种神奇的情况发生了,以便我能够执行与自定义tableview的显示相关的其他任务?在更新tableview时将调用的子类中是否有可以重写的方法?

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

在该解决方案中,数天来一直处于高低状态。它很有魅力,谢谢!以下是我的代码示例,供其他人参考:


// 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];

你能确切地解释一下你的子类需要做什么吗?通常,在操作tableview时,您会使用其委托、自定义单元格或表列,或替代tableview的一种绘图方法。我很难想出一个与你的问题相关的例子。这很公平。我想根据包含的行数调整tableview的高度。当它达到某个限制(比如说10行)时,我会允许它滚动,但对于第1-9行,我只希望它在屏幕上变得更高。太棒了!非常感谢。这就是我一直在寻找的:)作为后期跟进,我只想说这个解决方案非常有效。Cocoa使用KVC/KVO使事情变得非常简单。再次感谢。