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



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

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

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

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

  1. 当用户滚动每个数据源时,我需要记住滚动位置
  2. 当用户返回到数据源时,我需要加载上一个滚动位置

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

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

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

要保存的位置:

preservedPosition = tableView.visibleRect.origin

恢复:

tableView.scroll(preservedPosition)

最新更新