NSTableView滚动不起作用

时间:2012-12-14 04:26:27

标签: objective-c macos cocoa nstableview nsscrollview

我对tableview滚动有一个问题。

我已将滚动视图拖动到带框架的xib。

我正在以编程方式创建一个tableview,并将其添加到scrollview,如下所示:

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的文档,但没有多大帮助。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

除了这一行,你正在做的一切正确:

[ScrollView addSubview: rTableView];

标准NSScrollView + NSTableView安排将NSTableView设置为documentView的{​​{1}}。您已在代码中以编程方式正确设置此关系:

NSScrollView

当您添加[ScrollView setDocumentView: resultsTableView]; 行时,会以非预期的方式添加表格视图。基本上,此添加仅用于防止您看到其下方的正确滚动表视图。

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

[ScrollView addSubview: rTableView]有许多构成滚动架构的子视图(请参阅Scroll View Programming Guide for Mac)。检查Interface Builder面板中可用的标准“NSScrollViewNSTableView'表示滚动视图有4个直接子视图:

NSScrollView

其中一个剪辑视图包含"<NSClipView: 0x103507200>", "<NSScroller: 0x101b14f80>", "<NSScroller: 0x101b15210>", "<NSClipView: 0x103507be0>" ,另一个包含NSTableView。使用行NSTableHeaderView中的NSScrollView setDocumentView:正确设置表格视图为相应的[ScrollView setDocumentView: resultsTableView]文档视图。另一方面,将表格视图添加为NSClipView的直接子视图会导致您看到的意外结果。