我有NSViewController
包含基于视图的表格视图。当我初始化视图控制器并将其视图放在screent上时,表视图将滚动到底部。我宁愿让表格视图滚动到顶部。
我知道方法-scrollRowToVisible:
,但我无法确定在何处调用它,以便首先将表格视图滚动到顶部。我尝试在-loadView
的{{1}}方法的末尾插入它,但显然它不起作用,因为表视图在那时还没有加载它的行。
将呼叫置于NSViewController
方法的最佳位置是什么?或者,是否有一个属性使表视图显示它的第一行而不是最后一行?
答案 0 :(得分:0)
我认为这是要走的路..
- 一旦表格的所有项目/行都加载/显示在tableview
中,你应该调用scroll- 某处你会做reloadData,可能是从nib唤醒,这不是一种阻塞函数,它会调用一些UI Delegate函数,比如
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)aTableColumn byItem:(id)item
也许您应该在这里查看最后一项,NSTableViewUIDelegate中可能有一些委托功能,告诉您何时在表中加载/显示一个项目,您可以检查最后一项,这意味着所有表项都已加载,然后可以安全地调用scrollToVisible
答案 1 :(得分:0)
这是一个老问题,但是为了记录,我今天遇到了这个问题:
表视图的NSScrollView
开始滚动到底部,很可能是因为滚动视图在上次关闭窗口后恢复其最后滚动位置。
这是User Interface Preservation /状态恢复功能的一部分。
为了避免滚动视图恢复滚动位置(实际上是任何东西),你可以继承NSScrollView
并将它们子类化:
class NonPreservingScrollView: NSScrollView {
override func encodeRestorableState(with coder: NSCoder) {
// Nothing
}
override func restoreState(with coder: NSCoder) {
// Nothing
}
}
可能比尝试跟踪何时重新加载数据更加清晰,滚动视图在窗口加载时不会移动...