0

我有一个NSViewController包含基于视图的表视图。当我初始化视图控制器并将其视图放在屏幕上时,表格视图将滚动到底部。我宁愿让表格视图滚动到顶部。

我知道该方法-scrollRowToVisible:,但我不知道在哪里调用它以便表格视图首先出现滚动到顶部。-loadView我尝试将它插入到方法的末尾,NSViewController但显然它不起作用,因为此时表格视图甚至还没有加载它的行。

调用该方法的最佳位置是-scrollRowToVisible:什么?或者,是否有一个属性可以让表格视图显示它的第一行而不是最后一行?

4

2 回答 2

0

我认为这是要走的路..

--一旦表格的所有项目/行都加载/显示在表格视图中,您应该调用滚动

-- 在某个地方你会做 reloadData,可能是在从 nib 唤醒时,这不是一种阻塞函数,它会调用一些 UI Delegate 函数,比如

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)aTableColumn byItem:(id)item

也许您应该在这里检查最后一项,并且NSTableViewUIDelegate中可能有一些 Delegate 函数,它告诉您何时在表中加载/显示 Item ,您可以在那里检查最后一项,这意味着所有表项都得到了加载然后调用 scrollToVisible 是安全的

于 2013-03-29T04:50:17.913 回答
0

这是一个老问题,但为了记录,因为我今天自己遇到了这个问题:

你的NSScrollView表格视图开始滚动到底部,很可能是因为滚动视图在上次关闭窗口后恢复了它的最后滚动位置。

这是用户界面保留/状态恢复功能的一部分。

为了避免滚动视图恢复滚动位置(实际上,任何东西),您可以NSScrollView对这些进行子类化和子类化:

class NonPreservingScrollView: NSScrollView {

    override func encodeRestorableState(with coder: NSCoder) {
        // Nothing
    }
    override func restoreState(with coder: NSCoder) {
        // Nothing
    }
}

可能比尝试在重新加载数据完成时跟踪并且在窗口加载时滚动视图不会移动要干净一些......

于 2017-09-15T05:53:09.487 回答