我对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
的文档,但没有多大帮助。
非常感谢任何帮助。
答案 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面板中可用的标准“NSScrollView
”NSTableView
'表示滚动视图有4个直接子视图:
NSScrollView
其中一个剪辑视图包含"<NSClipView: 0x103507200>",
"<NSScroller: 0x101b14f80>",
"<NSScroller: 0x101b15210>",
"<NSClipView: 0x103507be0>"
,另一个包含NSTableView
。使用行NSTableHeaderView
中的NSScrollView
setDocumentView:
正确设置表格视图为相应的[ScrollView setDocumentView: resultsTableView]
文档视图。另一方面,将表格视图添加为NSClipView
的直接子视图会导致您看到的意外结果。