保留(和加载)table 每个数据源的视图滚动位置

Preserving (and loading) table view scroll position for each data source

我正在尝试在我的应用中复制 Mail.app 行为。如果您有多个电子邮件帐户,并且 select 每个帐户都有一封随机电子邮件,并从侧边栏在每个帐户之间切换,该应用程序会记住您的滚动位置和您 select 发送的电子邮件,并且相应地显示它们。这就是我想要在我的应用程序中使用的内容。

我知道如何保留行 selection,这很容易。 tableView.selectedRowIndexes

我的 tableView 有多个数据源并相应地从侧边栏切换 (tableView.reloadData())。

滚动位置有一个大问题。我尝试查看 NSScrollViewNSClipViewNSTableView。在我看来,每个视图都有滚动机制。

  1. 我需要记住用户滚动每个数据源时的滚动位置
  2. 我需要加载用户return之前的滚动位置到数据源

我注意到的另一个奇怪行为是,当将 tableView 重新加载到不同的数据源时,它似乎一直记得以前的数据源滚动位置。那是正常的吗?我以为它会重置到顶部。

我的数据源是数组,它们是我的 NSViewController 子类属性。

如果重要的话,我正在使用故事板,我的应用程序是针对大苏尔的,我正在使用 Swift。

要保存的位置:

preservedPosition = tableView.visibleRect.origin

恢复:

tableView.scroll(preservedPosition)