4

我对 tableview 滚动有疑问。

我已经用框架将滚动视图拖到 xib 中。

我正在以编程方式创建一个表视图并将其添加到滚动视图中,如下所示:

NSRect frame = [[ScrollView contentView] bounds];
rTableView = [[MTableView alloc] initWithFrame:frame];

MTableView是我的自定义类继承NSTableView,在构造函数中,我将列添加到表视图中。

[ScrollView setDocumentView: resultsTableView];
[ScrollView setHasVerticalScroller:YES];
[ScrollView setHasHorizontalRuler:YES];

[rTableView setDelegate:self];
[rTableView setDataSource:self];
[ScrollView addSubview: rTableView];

[rTableView reloadData];

我已经编写了委托函数来加载数据,并且表格正在填充数据。但是滚动不起作用。我在表中有 100 行,并且能够在表视图的初始加载时看到前 21 行。滚动没有任何反应,行索引(在数据委托中)总是 19 或 20。我不确定这里出了什么问题。我在stackoverflow中看到了一些旧帖子,遵循了文档NSTableView但没有太大帮助。

任何帮助深表感谢。

4

1 回答 1

1

除了这一行之外,你做的一切都是正确的:

[ScrollView addSubview: rTableView];

标准NSScrollView+NSTableView排列的NSTableView集合为documentViewNSScrollView。您已经在代码中以编程方式正确设置了这种关系:

[ScrollView setDocumentView: resultsTableView];

当您添加该[ScrollView addSubview: rTableView]行时,它以一种非预期的方式添加了表格视图。基本上,这个添加只是为了防止你看到它下面的正确滚动的表格视图。

删除该[ScrollView addSubview: rTableView]行应该可以让您正确查看表格视图,并允许滚动机制正常工作。

AnNSScrollView有许多组成滚动架构的子视图(请参阅Mac 的滚动视图编程指南)。检查 Interface Builder 调色板中可用的标准“ NSTableViewinside NSScrollView”显示滚动视图有 4 个直接子视图:

"<NSClipView: 0x103507200>",
"<NSScroller: 0x101b14f80>",
"<NSScroller: 0x101b15210>",
"<NSClipView: 0x103507be0>"

其中一个剪辑视图持有NSTableView,另一个持有NSTableHeaderView. 在行中使用 NSScrollView's将表格视图正确设置为各自的文档视图。另一方面,将表格视图添加为 的直接子视图会导致您看到的意外结果。setDocumentView:[ScrollView setDocumentView: resultsTableView]NSClipViewNSScrollView

于 2012-12-14T05:34:44.327 回答